2

有一个关于 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);

如果我已经正确推理出来,insert (consumer, val)如果没有现有条目,它应该做的是进入表格。如果有,那么它应该比较 a 和 b 的日期(表中的值和我的 val)。如果“val”大于表中的条目,则应将其替换为该条目。否则,坚持现有条目。

感谢任何帮助。谢谢!

4

1 回答 1

5

这是一个例子,

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,则将其删除。当为一个键组合多个映射值时,此方法可能很有用。

于 2018-07-12T15:28:01.720 回答