Java函数式编程:三、流与函数式编程( 四 )


  • 将流转化为一个数组
    • toArray()
    • toArray(generator)该方法会将元素保存在generator中 , 而不是创建一个新的并返回
  • 在每个流元素上应用某个终结操作
    • forEach(Consumer)在每个元素上调用Consumer方法
    • forEachOrdered(Consumer)该版本确保对元素的操作顺序是原始的流顺序
  • 收集操作
    • collect(Collector)相当复杂的一个方法,可以将所有元素存入我们给出的Collector容器中 。
      • 本方法主要复杂在,我们实际上可以使用java.util.stream.Collectors文档中相当多的对象,而且其中有一部分很复杂比如如果我们希望放入一个TreeSet中使它们总是有序,那么我们可以使用Collectors.toCollection(TreeSet::new)来创建该容器并应用
    • collect(Supplier, BiConsumer, BiConsumer)
      • 在极小情况下,我们无法从Collectors类中找到我们想要的处理容器,那么就需要第二个方法
  • 组合所有的流元素
    • reduce(BinaryOperator)组合所有元素,组合的方法就是参数方法
    • reduce(identity, BinaryOperator)以identity为初始值组合所有元素,方法为第二个参数
    • reduce(identity, BiFunction, BinaryOperator)复杂,未作介绍
  • 匹配,都是根据Predicate返回一个布尔值
    • allMatch(Predicate)
    • anyMatch(Predicate)
    • noneMatch(Predicate)
  • 选择一个元素
    • findFirst()返回一个包含流中第一个元素的Optional对象,若流中没有元素即返回Optional.empty
    • findAny()返回一个包含流中任意一个元素的Optional对象 , 若流中没有元素则为Optional.empty
      • 不过需要注意的是,该方法对于非并行的流似乎总是会选择流中的第一个元素,如果是并行的则随机
  • 获取流相关的信息
    • count()计算流中元素数量
    • max(Comparator)通过Comaprator获取流中最大的元素
    • min(Comparator)通过Comparator获取流中最小的元素
    • 如果是数值化的流,除了上面这些,还有以下方法
    • average()获得平均值
    • sum()获得累加值
    • summaryStatics()返回可能有用的摘要数据,基本没什么用

推荐阅读