Osmanthus

空想具現化


  • 首页
  • 归档
  • 分类
  • 标签
  • 关于
  •   

© 2024 Homurax

UV: | PV:

Theme Typography by Makito

Proudly published with Hexo

JDK 9中新增的Stream API与Collector

发布于 2018-10-31 Java  java-stream collectors 

API Specification

Interface Stream

Class Collectors

Stream中新增方法

default Stream<T> dropWhile(Predicate<? super T> predicate)
default Stream<T> takeWhile(Predicate<? super T> predicate)
public static<T> Stream<T> iterate(T seed, Predicate<? super T> hasNext, UnaryOperator<T> next)
public static<T> Stream<T> ofNullable(T t)

dropWhile

从流起始处丢弃匹配Predicate的元素至第一个不匹配的。
如果都匹配则返回空流,如果第一个就不匹配那么就是返回原始流。
形式接近Stream<T> skip(long n),从头跳过指定数量的元素。

Stream.of(1, 3, 2, 9, 4, 5, 6).dropWhile(x -> x < 5).forEach(System.out::println);

takeWhile

从流的起始处返回匹配的元素,从第一个不匹配的元素处开始丢弃之后元素。
如果都匹配则返回原始流,如果第一个就不匹配那么就是返回空流。
形式接近Stream<T> limit(long maxSize),截断长度不超过maxSize的部分,丢弃之后的元素。

Stream.of(1, 3, 2, 9, 4, 5, 6).takeWhile(x -> x < 5).forEach(System.out::println);

iterate

新的流创建方式,与之前创建无限流相比多提供了终止条件,使用形式类似于for循环。

Stream.iterate(1, n -> n <= 10, n -> n + 1).forEach(System.out::println);

ofNullable

如果元素非null 则返回仅含一个元素的流,如果元素为null 则返回一个空的流。

Stream.of("a", null, "c").flatMap(Stream::ofNullable).forEach(System.out::println);

Collectors中新增收集器

public static <T, A, R> Collector<T, ?, R> filtering(Predicate<? super T> predicate, Collector<? super T, A, R> downstream)
public static <T, U, A, R> Collector<T, ?, R> flatMapping(Function<? super T, ? extends Stream<? extends U>> mapper, Collector<? super U, A, R> downstream)

新增的两个收集器都比较适用于多级缩减的场景,比如处理分组、分区(groupingBy、partitioningBy)时用作downstream。

filtering

直接放官方API规范中的例子。

Map<Department, Set<Employee>> wellPaidEmployeesByDepartment
                = employees.stream().collect(
                groupingBy(Employee::getDepartment,
                        filtering(e -> e.getSalary() > 2000,
                                toSet())));

filtering收集器与Stream的filter()区别在于,如果某些部门中没有员工符合条件(e -> e.getSalary() > 2000),对于filtering收集器仍可以获得部门到空集的映射,而使用filter()则根本就不存在该部门的映射了。

flatMapping收集器用于在收集元素之前进行扁平映射,再将其通过downstream来收集。

对groupingBy的结果做缩减

 上一篇: docker笔记01-安装与入门 下一篇: 对groupingBy的结果做缩减(flatMap a groupingBy result) 

© 2024 Homurax

UV: | PV:

Theme Typography by Makito

Proudly published with Hexo