[英]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.