2016-03-15 81 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'无法解析 –