java - 处理 Collectors.toMap() 函数中的重复键

标签 java java-8 hashmap java-stream

我正在创建一个映射,它的 (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/

相关文章:

java - Google App Engine Java小操作

java - Spring -> org.hibernate.HibernateException : Illegal attempt to associate a collection with two open sessions

java - 解析scala中的日期(java时间api)

java - 在另一个 jar 中获取一个 jar 的文件系统

java - 类似于Java中的Scala宏

java - Java开发者学习Flash AS3的方法?

java - 如何在 Java 中实现可序列化的 BufferedWriter?

java - java中如何将String转换成Hashmap

Java - 如何从句子的ArrayList中获取每个单词

java - 在 Java 中计算 ConcurrentHashmap 中的 delta