java - 在 Collectors.toMap() 函数中处理重复键
问题描述
我正在创建一个地图,其(键,值)将在我的 Person 对象中为(名称,地址):
Map<String, String> myMap = persons.stream.collect(Collector.toMap(person.getName(), person.getAddress(), (address1, address2) -> address1));
在重复键的情况下,我想跳过将第二个地址添加到地图中,并且还想记录名称。跳过重复的地址我已经可以使用mergeFunction,但是为了在这个mergeFunction中记录我需要的人对象的名称,例如:
(address1, address2) -> {
System.out.println("duplicate "+person.name() + " is found!");
return address1;
}
我通过将人员对象传递给此合并函数而陷入困境。
解决方案
我相信这种forEach
方法Map.merge
会更简单,也更适合当前的用例:
Map<String, String> myMap = new HashMap<>();
persons.forEach(person -> myMap.merge(person.getName(), person.getAddress(), (adrs1, adrs2) -> {
System.out.println("duplicate " + person.getName() + " is found!");
return adrs1;
}));
注意:Map.merge
也使用(在 中使用的BiFunction
父级),因此您可以轻松地将此处的合并功能与您现有的所需功能相关联。BinaryOperator
toMap
推荐阅读
- wordpress - 限制公众访问整个 WP 网站
- c# - 如何重定向 asp.net 以从外部服务器下载文件
- python - Python 将多个附件图像发送到电子邮件。现在我成功仅发送 1 张图片
- c++ - c++ 使用内存分配破坏函数中的静态变量
- python - Python:计算总距离路径
- git - 如何区分 git 和 svn 存储库
- python - 在 Python 中,Spyne 遇到了很多问题
- c# - 时间刻度仍为 0,但应再次为 1
- python - 如何在python中用for循环填充二维数组的每个元素
- google-sheets-api - 使用带有 AppendCellsRequest 的电子表格.batchUpdate 忽略列样式