为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

开心每一天1111 2022-07-14 10:36:52
我正在尝试对名为的 ArrayList 执行以下流操作parts:parts    .stream()    .map(t -> t.toLowerCase())    .distinct()    .sorted()    .collect(Collectors.toList());其中parts包含这样的字符串:AdventuresinDisneylandTwoblondesweregoingtoDisneyland....除了查看调试器外,parts根本没有改变。不确定我是否遗漏了该过程的某些步骤?
查看完整描述

4 回答

?
慕容708150

TA贡献1831条经验 获得超4个赞

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

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

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


查看完整回答
反对 回复 2022-07-14
?
HUX布斯

TA贡献1876条经验 获得超6个赞

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

你应该做:

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

根据评论编辑:

要获得一个ArrayList而不是 any List,请将您的收集器更改为:

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


查看完整回答
反对 回复 2022-07-14
?
喵喵时光机

TA贡献1846条经验 获得超7个赞

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

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

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


查看完整回答
反对 回复 2022-07-14
?
白猪掌柜的

TA贡献1893条经验 获得超10个赞

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

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


查看完整回答
反对 回复 2022-07-14
  • 4 回答
  • 0 关注
  • 350 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号