java 新特性之 Stream API( 二 )

  1. 排序
方法描述sorted()产生一个新流,其中按自然顺序排序sorted(Comparator com)产生一个新流,其中按比较器顺序排序Stream API 的终止操作
  • 终端操作会从流的流水线生成结果 。其结果可以是任何不是流的值,例如:List、Integer,甚至是 void。
  • 流进行了终止操作后,不能再次使用 。
  1. 匹配与查找
方法描述allMatch(Predicate p)检查是否匹配所有元素anyMatch(Predicate p)检查是否至少匹配一个元素noneMatch(Predicate p)检查是否没有匹配所有元素findFirst()返回第一个元素findAny()返回当前流中的任意元素count()返回流中元素总数max(Comparator c)返回流中最大值min(Comparator c)返回流中最小值forEach(Consumer c)内部迭代(使用 Collection 接口需要用户去做迭代,称为外部迭代 。相反,Stream API 使用内部迭代————它帮你把迭代做了)
  1. 归约
方法描述reduce(T iden, BinaryOperator b)可以将流中元素反复结合起来,得到一个值 。返回 Treduce(BinaryOperator b)可以将流中元素反复结合起来 , 得到一个值 。返回 Optional备注: map 和 reduce 的连接通常称为 map-reduce 模式,因 Google用它来进行网络搜索而出名 。
  1. 收集
方法描述collect(Collector c)将流转换为其他形式 。接收一个 Collector 接口的实现,用于给Stream中元素做汇总的方法Collector 接口中方法的实现决定了如何对流执行收集的操作(如收集到 List、Set、Map) 。另外,Collectors 实用类提供了很多静态方法,可以方便地创建常见收集器实例,具体方法与实例如下表:
方法返回类型作用调用toListList把流中元素收集到ListList emps= list.stream().collect(Collectors.toList());toSetSet把流中元素收集到SetSet emps= list.stream().collect(Collectors.toSet());toCollectionCollection把流中元素收集到创建的集合Collection emps =list.stream().collect(Collectors.toCollection(ArrayList::new));countingLong计算流中元素的个数long count = list.stream().collect(Collectors.counting());summingIntInteger对流中元素的整数属性求和intaveragingIntDouble计算流中元素Integer属性的平均值double avg = list.stream().collect(Collectors.averagingInt(Employee::getSalary));summarizingIntIntSummaryStatistics收集流中Integer属性的统计值 。如:平均值int SummaryStatisticsiss= list.stream().collect(Collectors.summarizingInt(Employee::getSalary));joiningString连接流中每个字符串String str= list.stream().map(Employee::getName).collect(Collectors.joining());maxByOptional根据比较器选择最大值Optionalmax= list.stream().collect(Collectors.maxBy(comparingInt(Employee::getSalary)));minByOptional根据比较器选择最小值Optional min = list.stream().collect(Collectors.minBy(comparingInt(Employee::getSalary)));reducing归约产生的类型从一个作为累加器的初始值开始,利用BinaryOperator与流中元素逐个结合,从而归约成单个值int total=list.stream().collect(Collectors.reducing(0, Employee::getSalar,Integer::sum));collectingAndThen转换函数返回的类型包裹另一个收集器,对其结果转换函数int how= list.stream().collect(Collectors.collectingAndThen(Collectors.toList(), List::size));groupingByMap<K, List>根据某属性值对流分组 , 属性为K,结果为VMap<Emp.Status, List> map=list.stream().collect(Collectors.groupingBy(Employee::getStatus));partitioningByMap<Boolean, List>根据true或false进行分区Map<Boolean,List> vd = list.stream().collect(Collectors.partitioningBy(Employee::getManage));

推荐阅读