什么式Stream
流(Stream)是数据渠道,用于操作数据源(集合、数组等)所生成的元素序列。
集合讲的是数据,流讲的是计算
注意:
- Stream自己不会存储元素
- Stream不会改变源对象。相反,他会返回一个持有结果的新Stream
- Stream操作是延迟执行的。意味着他会等到需要结果的时候才执行
Stream操作的三个步骤
- 创建Stream
一个数据源(如:集合、数组),获取一个流 - 中间操作
一个中间操作链,对数据源的数据进行处理 - 终止操作(终端操作)
一个终止操作,执行中间操作链。并产生结果
示意图如下:
创建Stream
- default Stream<E> stream():返回一个顺序流
- default Stream<E> parallelStream():返回一个并行流
static <T> Stream<T> stream(T[] array):返回一个流
public static<T> Stream<T> of(T… values):返回一个流
- 迭代
public static<T> Stream<T> iterate(final T seed,final UnaryOperator<T> f)
- 生成
public static<T> Stream<T> generate(Supplier<T> s)
Stream的中间操作
多个中间操作可以连接起来形成一个流水线,除非流水线上触发终止操作,否则中间操作不会执行任何处理!而在终止操作时一次性全部处理,称为“惰性求值”
Stream的终止操作
终止操作会从流的流水线生成结果。其结果可以是任何不是流的值,例如List、Integer 甚至是void。
Collector接口中方法的实现决定了如何对流执行收集操作(如收集到List、Set、Map)。但是Collector实用类提供了很多静态方法可以方便的收集常见实例