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

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


parts

    .stream()

    .map(t -> t.toLowerCase())

    .distinct()

    .sorted()

    .collect(Collectors.toList());

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


Adventures

in

Disneyland

Two

blondes

were

going

to

Disneyland

....

除了查看调试器外,parts根本没有改变。不确定我是否遗漏了该过程的某些步骤?


开心每一天1111
浏览 351回答 4
4回答

慕容708150

在查看调试器时,“部件”根本没有改变正确的。流不会修改用于创建流的集合的元素。该流最终返回一个包含映射项的新项。&nbsp;List只需创建一个变量并将流操作的返回值分配给它:List<String>&nbsp;modifiedList&nbsp;=&nbsp;parts.stream() &nbsp;&nbsp;&nbsp;&nbsp;.map(t&nbsp;->&nbsp;t.toLowerCase()) &nbsp;&nbsp;&nbsp;&nbsp;.distinct() &nbsp;&nbsp;&nbsp;&nbsp;.sorted() &nbsp;&nbsp;&nbsp;&nbsp;.collect(Collectors.toList());

HUX布斯

您没有将收集的列表存储在任何地方。流不会就地更改集合。你应该做:parts&nbsp;=&nbsp;parts.stream().....;根据评论编辑:要获得一个ArrayList而不是 any&nbsp;List,请将您的收集器更改为:.collect(Collectors.toCollection(ArrayList::new));

喵喵时光机

流不会改变流的来源,因此您正在观察预期的行为。您应该捕获流处理的结果并在调试器中检查它,例如。List<String>&nbsp;result&nbsp;=&nbsp;parts.stream()...

白猪掌柜的

这将创建一个新列表,这就是地图运算符的工作方式。您正在用新对象替换流中的项目,然后将流收集到一个新列表中。您必须将结果分配给新列表。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java