8 Stream流式API

2018-02-19  本文已影响0人  王毅巽

8.1 简介

        Java8新增了Stream、IntStream、LongStream、DoubleStream等流式API,这些API代表多个支持串行和并行聚集操作的元素。

    使用Stream流的步骤如下:

        - 使用Stream或XxxStream的builder()类方法创建该Stream对应的Builder。

        - 重复调用Builder的add()方法向该流中添加多个元素。

        - 调用Builder的build()方法获取对应的Stream。

        - 调用Stream的聚集方法。

8.2 聚集方法与分类

    Stream的聚集方法分为两类:

        - 中间方法:中间操作允许流保持打开状态,并允许直接调用后续方法。中间方法的返回值是另一个流,不会影响原有流中的数据。

        - 末端方法:末端方法是对流的最终操作。执行末端方法后,流将会被消耗且不再可用。

    流的方法有如下两个特征:

        - 有状态的方法:这种方法会给流增加一些新的属性,比如元素的唯一性、元素的最大数量、对元素进行排序。有状态的方法往往需要更大的性能开销。

        - 短路方法:尽早结束对流的操作,不必检查所有的元素。

    Stream常用的中间方法:

        - filter(Predicate predicate):过滤Stream中所有不符合predicate的元素。

        - mapToXxx(ToXxxFunction mapper):使用ToXxxFunction对流中的元素执行一对一的转换,该方法返回的新流中包含了ToXxxFunction转换生成的所有元素。

        - peek(Consumer action):依次对流进行一些操作,此方法返回的流与原有流包含相同的元素。此方法主要用于调试。

        - distinct():此方法用于排序流中所有重复的元素,此方法为有状态方法。

        - sorted():对流进行排序,此方法为有状态方法。

        - limit(long maxSize):限制流中的元素个数,此方法为有状态的、短路的方法。

    Stream常用的末端方法:

        - forEach(Consumer action):遍历流中所有元素。

        - toArray():将流中所有元素转换为数组。

        - reduce():合并流中的元素。

        - min():返回流中所有元素的最小值。

        - max():返回流中所有元素的最大值。

        - count():返回流中所有元素的数量。

        - anyMatch(Predicate predicate):流中是否至少包含一个符合特定条件的元素。

        - allMatch(Predicate predicate):流中是否至少每个元素都符合特定条件。

        - noneMatch(Predicate predicate):流中是否所有元素都不符合特定条件。

        - findFirst():返回流中的第一个元素。

        - findAny():返回流中任意一个元素。

上一篇下一篇

猜你喜欢

热点阅读