在流定义

时间:2014-01-25 11:10:27

标签: java stream java-stream

API reference中写道:

  

流是一系列支持顺序和并行的元素   集合运营

然后,

  

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

再次来自Java教程

  

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

那么,流是否包含元素?

1 个答案:

答案 0 :(得分:1)

Streams定义数据的逻辑组织。流可能包含也可能不包含"存储在内存(物理组织)中的数据意义上的元素。它们可能是lazily computed,允许无限大小。

集合还定义了数据的逻辑组织。集合也可能是懒惰计算的:您可以编写一个List<T>实现,它包含计算Function<Integer, T>结果的List.get(int)。这样的清单会禁止变异。 (在使用单链表作为原始数据结构的函数式语言中,数组有时表示为函数 - 这个List - 从函数模式可以看作是逆操作。)类似地{{1}可以被视为不可变的Function<K, V>。无限Map<K, V> s有点笨拙,因为List具有有限范围,因此int只能访问列表的有限范围,但它们是可能的。

因此,数据(列表,地图,流)的逻辑组织大部分与物理布局正交(存储在数组或树中,或者从函数中懒惰地计算)。这是收集和流抽象的重点。