一尘不染

Java 使用流生成地图时忽略重复项

java

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

当重复发生时,我得到重复键异常。

发生重复时,是否可以忽略添加要映射的值?

当有重复项时,只需忽略该重复项即可继续。


阅读 283

收藏
2020-03-23

共1个答案

一尘不染

使用以下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只是告知保留第一个地址,而忽略第二个地址。

2020-03-23