我有以下情況,需要從流中刪除元素。如何在流式傳輸中刪除HashMap的元素(lambda)
map.entrySet().stream().filter(t -> t.getValue().equals("0")).
forEach(t -> map.remove(t.getKey()));
在Java 8之前的代碼中,將會從迭代器中移除 - 在這裏處理這種情況的最佳方法是什麼?
我有以下情況,需要從流中刪除元素。如何在流式傳輸中刪除HashMap的元素(lambda)
map.entrySet().stream().filter(t -> t.getValue().equals("0")).
forEach(t -> map.remove(t.getKey()));
在Java 8之前的代碼中,將會從迭代器中移除 - 在這裏處理這種情況的最佳方法是什麼?
map.entrySet().removeIf(entry -> entry.getValue().equals("0"));
過濾器3210
你不能用流來完成,但你可以用其他新方法來完成。
編輯:甚至更好:
map.values().removeAll(Collections.singleton("0"));
我認爲這是不可能的(或deffinitelly不應該做的),由於流有非iterference慾望,如描述here
如果你想流作爲你的函數編程結構泄漏到Java中,後來想想,支持他們爲自己的功能同行在函數式編程,你不可變對象
操作對象和對付它的最好方法是使用就像你一樣
完美 - 允許我使用的,而不是迭代的長篇大論老方法一行。 – Dan
這不會從entrySet中移除,而不是從地圖本身移除,還是會自動同步? –
entrySet是一個視圖;它的變化反映在地圖上,反之亦然;它沒有獨立的存在。 –