java调用filter,map方法
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))
2. 将数组转换为流的方式
- Stream.of(数组名)
- Arrays.stream(数组名)