繁体   English   中英

Java Streams方法不影响我的ArrayList吗?

[英]Java Streams methods not affecting my ArrayList?

我正在尝试对名为parts的ArrayList执行以下流操作:

parts
    .stream()
    .map(t -> t.toLowerCase())
    .distinct()
    .sorted()
    .collect(Collectors.toList());

其中parts包含这样的字符串:

Adventures
in
Disneyland
Two
blondes
were
going
to
Disneyland
....

除了查看调试器外,其他parts完全没有更改。 不确定我是否缺少该过程的某些步骤?

在查看调试器时,“部件”完全没有改变

正确。 流不修改用于创建流的集合的元素。 该流最终将返回一个包含映射项的 List 只需创建一个变量并为其分配流操作的返回值即可:

List<String> modifiedList = parts.stream()
    .map(t -> t.toLowerCase())
    .distinct()
    .sorted()
    .collect(Collectors.toList());

您不在任何地方存储收集的列表。 流不会就地更改集合。

你应该做:

parts = parts.stream().....;

根据评论进行编辑

要获取ArrayList而不是任何List ,请将您的收集器更改为:

.collect(Collectors.toCollection(ArrayList::new));

流不会改变流的来源,因此您正在观察预期的行为。

您应该捕获流处理的结果,并在调试器中对其进行检查,例如。

List<String> result = parts.stream()...

这将创建一个新列表,这就是地图运算符的工作方式。 您正在用新对象替换流中的项目,然后将流收集到新列表中。

您必须将结果分配给新列表。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM