java调用filter,map方法

发布时间 2023-07-04 19:35:41作者: 看风景就

java的集合类,没有直接实现filter,map这些函数式方法,要调用这些方法,可以使用 Java8 的 Stream API

详细使用可参考: Java8中Stream详细用法大全 

Java8 的 Stream API 的坑

1. 没有直接的 findObj 方法

findFirst 和 findAny 都不支持传入条件

要从list中查找一个对象,只能通过filter得到一个list,再通过 findFirst 获取,最后再通过 get 才能拿到原始类型的对象

User u = list.stream().filter(t -> t.getId() == id).findFirst().get()

而且 findFirst 还有坑,返回的 Optional<T> 类型为 null 时候,不能get,要判断一下

解决方法有如下几种:

//使用orElse(null)
User u = list.stream().filter(t -> t.getId() == id).findFirst().orElse(null)

//使用 isPresent 判断
Optional<User> u = list.stream().filter(t -> t.getId() == id).findFirst().orElse(null)
return u.isPresent() ? u.get() : null;

//使用 ifPresent(e -> xxx)
list.stream().filter(t -> t.getId() == id).findFirst().orElse(null).ifPresent(e -> System.out.println(e))