Java8新增了Steam、IntStream、LongStream、DoubleStream,同时提供了对应的Builder,例如Stream.Builder、IntSteam.Builder、LongStream.Builder、DoubleStream.Builer数组
独立使用Stream的步骤:app
- 使用Stream或XxxStreamAPI的builder()类方法建立该Stream对应的Builder
- 重复使用Builder的add()方法向该流中添加多个元素
- 调用Builder的build()方法获取对应的Stream
- 调用Stream的汇集方法
Stream提供了大量的方法进行汇集操做,这些方法既能够是中间的,也能够是末端的ui
中间方法:中间方法容许流保持打开的状态,并容许直接调用后续的方法,中间方法的返回值是另一个流。调试
末端方法:末端方法是对流的最终的操做。当某个流执行末端方法后,改流将会消耗且再也不可用排序
Stream经常使用的中间方法:it
- filter(Predicate predicate):过滤Steam中全部不符合predicate的元素。
- mapToXxx(ToXxxFunction mapper):使用ToXxxFunction对流中的元素执行一对一的转换,该方法返回的新流包含了ToXxxFunction转换后的全部的元素。
- peek(Consumer action): 以次对每一个元素执行一些操做,该方法返回流与原有流包含相同的元素。该方法主要用于调试。
- distinct():该方法用于排序流中全部的重复的元素(判断元素重复的标准是使用equal()方法返回true)。这是一个有状态的方法。
- sorted():该方法用于保证流中的元素在后续的访问中处于有序的状态。这是一个有状态的方法。
- limit(long maxSize):该方法用于保证流中的后续访问中最大的容许访问元素的个数。这是一个有状态的、短路的方法。
经常使用的末端方法:io
- forEach(Consumer action):遍历流中的全部元素,对每一个元素执行action。
- toArray():将流中的全部的元素转换为一个数组。
- reduce():该方法有三个重载的版本,都是用于经过某种操做来合并流中的元素
- min():返回流中全部元素的最小值
- max():返回六中全部元素的最大值
- count():返回流中全部元素的个数.
- anyMatch(Predicate predicate) :判断流中是否至少包含一个元素符合Predicate条件
- allMatch(Predicate predicate): 判断流中是否每一个元素都符合Predicate条件
- noneMatch(Predicate predicate):判断流中是否全部元素都不符合Predicate条件
- findFirst():返回流中的第一个元素.
- findAny():返回流中的任意一个元素.