Stream
Stream是一组用来处理数组、集合的API。
引入函数式编程的原因:
- 代码简洁,意图明确。使用Stream接口可以告别for循环。
- 多核友好。函数式编程使得编写并行程序简单,需要的全部只是调用一下parallel()方法。
特性
- 不是数据结构,没有内部储存。
- 不支持索引访问。
- 延迟计算。
- 支持并行
- 很容易生成数组或者集合
- 支持过滤、查找、转换、汇总、聚合等操作。
运行机制
Stream分为 源source、中间操作、终止操作。
流的源可以是一个数组、一个集合、一个生成器方法、一个IO通道等等。
一个流可以有零个或者多个中间操作,每一个中间操作都会但会一个新的流,供下一个操作使用,一个流只有一个终止操作。
Stream只有遇到终止操作,它的源才开始执行遍历操作。
Stream的创建
- 通过数组
- 通过集合
- 通过生成器——Stream.generate方法来创建。
- 通过IO通道——Stream.iterate方法来创建。
- 其他API创建。
Stream常用的API
中间操作
过滤 filter
去重 distinct
排序 sorted
截取 limit、skip
转换 map、flatMap
其他 peek
终止操作
循环 forEach
计算 min、max、count、average
匹配 anyMatch、allMatch、noneMatch、findFirst、findAny
汇聚 reduce
收集器 toArray collect