我正在学习Java 8中的Streams。我对这个概念感到困惑:
集合是一种内存数据结构,它包含数据结构当前具有的所有值 - 集合中的每个元素必须先计算才能添加到集合中。相反,流是概念上固定的数据结构,其中元素是按需计算的。
我不明白。 Collection如何才能保存在添加到集合之前必须已计算的值?而且,Stream与固定数据结构的比较是什么意思?
答案 0 :(得分:44)
您没有提供报价来源,所以让我引用javadoc给您:
Streams在几个方面与集合不同:
- 无存储空间。流不是存储元素的数据结构;相反,它通过计算操作管道传递来自数据结构,数组,生成器函数或I / O通道等源的元素。
- 功能性。对流的操作会产生结果,但不会修改其源。例如,过滤从集合中获取的
Stream
会生成一个没有过滤元素的新Stream
,而不是从源集合中删除元素。- 的懒惰寻即可。许多流操作(例如过滤,映射或重复删除)可以懒惰地实现,从而暴露出优化的机会。例如,"找到第一个带有三个连续元音的
String
"不需要检查所有输入字符串。流操作分为中间(Stream
- 生产)操作和终端(产生价值或副作用)操作。中级操作总是很懒惰。- 可能无界。虽然集合的大小有限,但流不需要。诸如
limit(n)
或findFirst()
之类的短路操作可以允许无限流上的计算在有限时间内完成。- <强>消耗品即可。流的元素仅在流的生命期间访问过一次。与
Iterator
类似,必须生成新流以重新访问源的相同元素。
相比之下,Collection
是对象(元素)的容器。除非先前已将对象添加到集合中,否则无法从集合中获取(检索)对象。