2016-03-15 84 views
5

我想按LinkedList<String>的大小過濾ConcurrentHashMap<String, LinkedList<String>>按值過濾ConcurrentHashMap

換句話說,我想過濾掉ConcurrentHashMapLinkedList<String>的大小大於4的元素。我如何通過Java 8完成它?

+0

地圖你所說的「過濾器」的意思去做就地?你的過濾標準是什麼?請添加更多信息 –

回答

11

如果你有ConcurrentMap,你可以簡單地創建其條目的數據流,通過調用entrySet()然後stream(),並保持其中的值具有通過施加filter比4的長度更大的條目。最後,您可以使用內置的Collectors.toConcurrentMap將其再次收集到ConcurrentMap中。

ConcurrentMap<String, LinkedList<String>> map = new ConcurrentHashMap<>(); 

ConcurrentMap<String, LinkedList<String>> result = 
    map.entrySet() 
     .stream() 
     .filter(e -> e.getValue().size() > 4) 
     .collect(Collectors.toConcurrentMap(Map.Entry::getKey, Map.Entry::getValue)); 

或者,你可以通過修改與

map.values().removeIf(l -> l.size() <= 4); 
+0

感謝一堆,這工作。一個小錯誤 - Map > map = new ConcurrentHashMap <>();'否則編譯器說'getKey'和'getValue'無法解析 –