【发布时间】:2019-01-24 19:03:51
【问题描述】:
由于不能将任何元素添加到不可变列表中,我认为 java 流首先将元素收集到一个列表中,然后使用第一个列表中的元素创建一个新的不可变列表。因此,列表有两个实例,第一个实例可用于垃圾回收。
所以,我的问题是
- 流是否真的创建了上面提到的两个列表对象?
- 如果不是,流如何创建不可变列表?
【问题讨论】:
-
您使用什么特定代码从流中创建不可变列表?
-
是什么让您认为流正在创建不可变集合?您的问题似乎是基于我没有看到任何基础的断言,例如
Collectors.toList()并没有说它创建了一个不可变的列表。 -
您为什么认为使用临时列表创建不可变列表需要副本?
-
您的问题似乎需要澄清,因为它与您在 your 第二条评论中描述的问题不同。此外,如果您询问如何 通过流创建不可变列表,您可以使用
stream.collect(collectingAndThen(toList(), Collections::unmodifiableList));之类的构造。正如 Louis 提到的(可能没有明确说明,但我认为这是有意的)Collections.unmodifiableList(list)不需要从list复制任何元素,它只是创建 wrapper 列表类,它将处理一个适合不可变类的方式。 -
您在问 Java 流如何创建不可变列表。 没有。如果您想要一个具有与流实现代码提供的默认列表不同的特征(例如不可变)的列表,那么您为此提供代码。所以看起来你真的在问:我该怎么做?这是你的问题吗?如果是这样,请编辑问题并澄清它。
标签: java java-8 java-stream immutability