按值过滤ConcurrentHashMap

g0c*_*33k 7 java filtering concurrenthashmap java-8 java-stream

我试图ConcurrentHashMap<String, LinkedList<String>>按照大小过滤LinkedList<String>.

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

Tun*_*aki 15

如果你有一个ConcurrentMap,你可以通过调用entrySet()然后stream()通过应用a来保持条目的长度大于4的条目,只需创建其条目流filter.最后,您可以将其再次收集到ConcurrentMap内置的内容中Collectors.toConcurrentMap.

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));
Run Code Online (Sandbox Code Playgroud)

或者,您可以通过修改地图来就地执行此操作

map.values().removeIf(l -> l.size() <= 4);
Run Code Online (Sandbox Code Playgroud)