1

API 参考中是这样写的:

流是支持顺序和并行聚合操作的元素序列

然后,

在此示例中,小部件是一个集合。我们通过 Collection.stream() 创建一个 Widget 对象流,对其进行过滤以生成仅包含红色小部件的流,然后将其转换为表示每个红色小部件重量的 int 值流。然后将该流相加以产生总重量。

再次来自 Java 教程

流是一系列元素。与集合不同,它不是存储元素的数据结构

那么,流是否包含元素?

4

1 回答 1

1

流定义了数据的逻辑组织。就存储在内存中的数据(物理组织)而言,流可能“包含”元素,也可能不“包含”元素。它们可能会被延迟计算,允许无限大小。

集合还定义了数据的逻辑组织。集合也可能是惰性计算的:您可以编写一个List<T>包装 a 的实现Function<Integer, T>来计算List.get(int). 这样的清单将禁止突变。(在使用单链表作为原始数据结构的函数式语言中,数组有时表示为函数——这种List-from-function 模式可以看作是逆运算。)类似地,aFunction<K, V>可以看作是不可变的Map<K, V>。Infinite Lists 有点笨拙,因为int它的范围有限,因此get(int)只能访问列表的有限范围,但它们是可能的。

因此,数据的逻辑组织(列表、映射、流)大多与物理布局正交(存储在数组或树中,或从函数中延迟计算)。这就是集合和流抽象的意义所在。

于 2014-06-18T17:40:48.410 回答