1. 什么是流
可以看成遍历数据集的高级迭代器
-
从支持数据处理操作的源-->生成的-->元素序列
- 源:提供数据的源:集合、数组或I/O资源
- 从有序集合生成流时会保留原有的顺序
但是与集合不同的是,你可以以声明式方式处理数据集
2. 集合与流
- 集合与流的差异在于什么时候进行计算
- 集合中的每个元素必须全部算出来才能添加,类似于DVD中电影;而流按需计算。就像互联网看电影那样,不用等待电影全部下载
- 只能被消费一次
Stream<String> s = lists.Stream();
s.forEach(System.out::println);
s.forEach(System.out::println);
上述代码会报错
- 另外一个不同点在于遍历数据的方式
- 集合时外部迭代,即需要用户去做迭代;而流使用内部迭代,即它帮你做了
3. 中间操作与终端操作
- 像filter等可以连接起来的流操作称为中间操作
- 中间操作会返回另一个流
- 除非有终端操作,否则中间操作不会执行任何处理
- 关闭流的操作称为终端操作
- 结果为任何不是流的值