ConcurrentHashMap 中的合并函数

SS'*_*SS' 3 java hashmap concurrenthashmap java-8 bifunctor

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

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

map.merge(consumer, val, (a, b) -> (a.date().compareTo(b.date())) >= 0 ? a : b);
Run Code Online (Sandbox Code Playgroud)

如果我正确地推理出它应该做的事情就是insert (consumer, val)在没有现有条目的情况下将其放入表中。如果有,那么它应该比较 a 和 b 的日期(表中的值和我的 val)。如果“val”大于表中的条目,则应将其替换为该条目。否则,坚持使用现有条目。

感谢任何帮助。谢谢!

Rav*_*ala 6

这是一个例子,

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

map.merge(1, "newOne", (v1, v2) -> v1 + ", " + v2);
Run Code Online (Sandbox Code Playgroud)

当存在按键冲突时使用第三个重新映射功能。以下是文档的摘录:

如果指定的键尚未与值关联或与 null 关联,则将其与给定的非 null 值关联。否则,用给定重映射函数的结果替换关联值,或者如果结果为空则删除。当组合一个键的多个映射值时,可以使用此方法。