簡體   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