ConcurrentHashMap中的合并功能

时间:2018-07-12 14:37:40

标签: java java-8 hashmap concurrenthashmap bifunctor

回答了有关ConcurrentHashMaps合并功能的问题。函数编程的新手,所以不确定是否可以正确使用它。

https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ConcurrentHashMap.html#merge-K-V-java.util.function.BiFunction-

map.merge(consumer, val, (a, b) -> (a.date().compareTo(b.date())) >= 0 ? a : b);

如果我没有正确地推理出该怎么办,应该在没有现有条目的情况下将insert (consumer, val)插入表中。如果存在,则应比较a和b的日期(表中的值和我的val)。如果“ val”大于表中的条目,则应将其替换为该表中的条目。否则,请保留现有条目。

感谢任何帮助。谢谢!

1 个答案:

答案 0 :(得分:1)

这是一个例子,

Map<Integer, String> map = new HashMap<Integer, String>();
map.put(1, "one");
map.put(2, "two");

map.merge(1, "newOne", (v1, v2) -> v1 + ", " + v2);

当存在键冲突时,将使用第三个重新映射功能。这是文档摘录:

  

如果指定的键尚未与值关联或已   与null关联,将其与给定的非null值关联。   否则,用给定的结果替换关联的值   重映射函数;如果结果为null,则将其删除。这种方法可能   在组合键的多个映射值时很有用。