java - 合并映射中的重复键被忽略
问题描述
我一直试图理解为什么在收集地图时没有触发重复键功能,但没有运气。我正在使用 Java SE 8 [1.8.0_141]。
public static void main(String[] args) {
Map<Long, Long> ts1 = new HashMap<Long, Long>();
Map<Long, Long> ts2 = new HashMap<Long, Long>();
ts1.put(0L, 2L);
ts1.put(1L, 7L);
ts2.put(2L, 2L);
ts2.put(2L, 3L);
Map<Long, Long> mergedMap = Stream.of(ts1, ts2)
.flatMap(map -> map.entrySet().stream())
.collect(Collectors.toMap(
Map.Entry::getKey,
Map.Entry::getValue,
(v1, v2) -> {
System.out.println("Duplicate found");
return v1 + v2;}
));
mergedMap.entrySet().stream().forEach(e -> System.out.println(e.getKey() + " " + e.getValue()));
}
结果是
0 2
1 7
2 3
我期待着
0 2
1 7
2 5
解决方案
当你这样做时:
ts2.put(2L, 2L);
ts2.put(2L, 3L);
第二个put
是覆盖第一个。所以ts2
地图只包含一个条目:最后一个:(2L, 3L)
。
所以,没有什么可以合并的。
推荐阅读
- php - 在 IP2Location 重定向上设置 URL 相同页面
- android - 如何确保 ImageButton 背景和布局背景颜色相同
- ruby - Ruby未定义方法但方法存在
- ruby-on-rails - Rails rake 任务显示版本返回错误 Errno::ENOENT: No such file or directory @ rb_sysopen - VERSION
- java - 我可以在我的代码中执行这个 for 循环来提取不同的值吗?
- variables - Python:调用函数后如何停止在函数中获取变量?
- android - 我可以更改密钥库路径,否则我将永远无法更新我的应用程序?
- javascript - 根据订购的总单位设置单价
- arrays - 对关联数组元素进行数值比较后的语法错误标记值
- css - 在 Odoo 的 Qweb 报告中垂直和水平对齐到中间