Java 8 中的流和集合有什么区别

2022-09-01 07:26:35

我正在学习Java 8中的Streams。我对这个概念感到困惑:

集合是一种内存中的数据结构,它保存数据结构当前具有的所有值 - 必须先计算集合中的每个元素,然后才能将其添加到集合中。相比之是概念上固定的数据结构,其中元素是按需计算的。

我不明白,集合如何仅保存必须计算的值,然后才能将其添加到集合中?另外,将流与固定数据结构进行比较意味着什么?


答案 1

您没有提供报价的来源,因此让我向您引用javadoc

流在几个方面与集合不同:

  • 无存储。流不是存储元素的数据结构;相反,它通过计算操作管道从源(如数据结构、数组、生成器函数或 I/O 通道)传达元素。
  • 功能性。对流的操作会生成结果,但不会修改其源。例如,筛选从集合中获取的元素会生成一个没有筛选元素的新元素,而不是从源集合中删除元素。StreamStream
  • 懒惰寻求。许多流操作(如过滤、映射或重复删除)可以延迟实现,从而暴露出优化的机会。例如,“查找具有三个连续元音的第一个元音”不需要检查所有输入字符串。流操作分为中间(生产)操作和终端(价值或副作用产生)操作。中间操作总是懒惰的。StringStream
  • 可能是无限的。虽然集合的大小有限,但流不需要。短路操作(如 或 可以允许无限流的计算在有限的时间内完成)。limit(n)findFirst()
  • 耗材。在流的生命周期中,流的元素只访问一次。就像 一个 ,必须生成一个新的流来重新访问源的相同元素。Iterator

相反,集合是对象(元素)的容器。无法从集合中获取(检索)对象,除非该对象以前已添加到集合中。


答案 2

一些基本区别是

Difference between Collection and Stream

但这些都是一些有限的差异,你必须探索才能知道更多。收藏就像CD / DVD,流媒体是电影。流可以是无状态的,也可以是有状态的。