Map<String, String> phoneBook = people.stream()
                                      .collect(toMap(Person::getName,
                                                     Person::getAddress));

当发现重复的元素时,我得到java.lang.IllegalStateException: Duplicate key.

在向 map 添加值时是否可以忽略此类异常?

当存在重复密钥时,只需忽略该重复密钥即可继续.

推荐答案

这可以使用mergeFunction参数Collectors.toMap(keyMapper, valueMapper, mergeFunction):

Map<String, String> phoneBook = 
    people.stream()
          .collect(Collectors.toMap(
             Person::getName,
             Person::getAddress,
             (address1, address2) -> {
                 System.out.println("duplicate key found!");
                 return address1;
             }
          ));

mergeFunction是一个对与同一个键相关的两个值进行操作的函数.adress1对应于收集元素时遇到的第一个地址,adress2对应于遇到的第二个地址:这个lambda只告诉保留第一个地址,而忽略第二个地址.

Java相关问答推荐

一般类型和kotlin阴影Java函数的问题

基于仅存在于父级中的字段查询子文档?

使用包私有构造函数强制子类Java类

Jooq外键关系

只需最少的代码更改即可将版本号标记添加到日志(log)

获取字符串中带空格的数字和Java中的字符

当返回Mono<;Something>;时,不会调用Mono<;void>;.flatMap

我的Spring Boot测试显示&IlLegalStateException:无法加载某事的ApplicationContext.

Java17支持哪个MapR版本?

二进制数据的未知编码/序列化

Spring Boot中的应用程序.properties文件中未使用的属性

当b是一个字节并且在Java中值为-1时,为什么b>;>;>;1总是等于-1?

如何在字节数组中反转UTF-8编码?

活泼的一次判断成语,结果中等

如何在Struts2中使用操作类中的结果注释重定向到不同的命名空间

无限递归Java问题

如何在Spring Boot Auth服务器上正确配置CORS?

Java递归泛型是否可以被视为继承和重写的语法糖

读取ConcurrentHashMap中的可变对象

当我try 返回可选时,Mock无法正常工作