2014-05-22 44 views
27

我有以下情況,需要從流中刪除元素。如何在流式傳輸中刪除HashMap的元素(lambda)

map.entrySet().stream().filter(t -> t.getValue().equals("0")). 
      forEach(t -> map.remove(t.getKey())); 

在Java 8之前的代碼中,將會從迭代器中移除 - 在這裏處理這種情況的最佳方法是什麼?

回答

65
map.entrySet().removeIf(entry -> entry.getValue().equals("0")); 
過濾器3210

你不能用流來完成,但你可以用其他新方法來完成。

編輯:甚至更好:

map.values().removeAll(Collections.singleton("0")); 
+0

完美 - 允許我使用的,而不是迭代的長篇大論老方法一行。 – Dan

+0

這不會從entrySet中移除,而不是從地圖本身移除,還是會自動同步? –

+9

entrySet是一個視圖;它的變化反映在地圖上,反之亦然;它沒有獨立的存在。 –

2

我認爲這是不可能的(或deffinitelly不應該做的),由於流有非iterference慾望,如描述here

如果你想流作爲你的函數編程結構泄漏到Java中,後來想想,支持他們爲自己的功能同行在函數式編程,你不可變對象

操作對象和對付它的最好方法是使用就像你一樣