我正在创建一个映射,它的 (key,value) 将是我的 Person 对象中的 (name, address):
Map<String, String> myMap = persons.stream.collect(Collector.toMap(person.getName(), person.getAddress(), (address1, address2) -> address1));
在重复键的情况下,我想跳过将第二个地址添加到 map 并且还想记录名称。跳过我已经可以使用 mergeFunction 做的重复地址,但是为了在这个 mergeFunction 中记录我需要的名字,person 对象,比如:
(address1, address2) -> {
System.out.println("duplicate "+person.name() + " is found!");
return address1;
}
我将 person 对象传递给此合并函数时遇到困难。
最佳答案
我相信 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
(toMap 中使用的
),因此您可以轻松地将此处的合并功能与您现有的所需功能相关联。BinaryOperator
的父级)
关于java - 处理 Collectors.toMap() 函数中的重复键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54131743/