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