亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

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 關注
  • 309 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號