在API reference中写道:
流是一系列支持顺序和并行的元素 集合运营
然后,
在此示例中,窗口小部件是一个集合。我们创建了一个流 通过Collection.stream()对Widget对象进行过滤,生成一个 流只包含红色小部件,然后将其转换为 表示每个红色小部件权重的int值流。然后 将该流相加以产生总重量。
再次来自Java教程
流是一系列元素。与集合不同,它不是一个集合 存储元素的数据结构
那么,流是否包含元素?
答案 0 :(得分:1)
Streams定义数据的逻辑组织。流可能包含也可能不包含"存储在内存(物理组织)中的数据意义上的元素。它们可能是lazily computed,允许无限大小。
集合还定义了数据的逻辑组织。集合也可能是懒惰计算的:您可以编写一个List<T>
实现,它包含计算Function<Integer, T>
结果的List.get(int)
。这样的清单会禁止变异。 (在使用单链表作为原始数据结构的函数式语言中,数组有时表示为函数 - 这个List
- 从函数模式可以看作是逆操作。)类似地{{1}可以被视为不可变的Function<K, V>
。无限Map<K, V>
s有点笨拙,因为List
具有有限范围,因此int
只能访问列表的有限范围,但它们是可能的。
因此,数据(列表,地图,流)的逻辑组织大部分与物理布局正交(存储在数组或树中,或者从函数中懒惰地计算)。这是收集和流抽象的重点。