按值

时间:2016-03-15 13:10:46

标签: java java-8 filtering java-stream concurrenthashmap

我正在尝试按ConcurrentHashMap<String, LinkedList<String>>的大小过滤LinkedList<String>

换句话说,我想过滤ConcurrentHashMapLinkedList<String>的大小大于4的元素。如何通过Java 8完成它?

1 个答案:

答案 0 :(得分:15)

如果您有ConcurrentMap,则可以通过调用entrySet()然后stream()来创建其条目流,并保留值长度大于4的条目通过应用filter。最后,您可以使用内置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);