【问题标题】:Filter ConcurrentHashMap by value按值过滤 ConcurrentHashMap
【发布时间】:2016-06-30 22:52:08
【问题描述】:

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

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

【问题讨论】:

  • “过滤器”是什么意思?你的过滤标准是什么?请添加更多信息

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


【解决方案1】:

如果您有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);

【讨论】:

  • 非常感谢,这行得通。一个小修正 - Map&lt;String, LinkedList&lt;String&gt;&gt; map = new ConcurrentHashMap&lt;&gt;(); 否则编译器会说 getKeygetValue 无法解析
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-11-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多