Map<String, String> phoneBook=people.stream() .collect(toMap(Person::getName, Person::getAddress));
当重复发生时,我得到重复键异常。
发生重复时,是否可以忽略添加要映射的值?
当有重复项时,只需忽略该重复项即可继续。
使用以下mergeFunction参数可以实现Collectors.toMap(keyMapper, valueMapper, mergeFunction):
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只是告知保留第一个地址,而忽略第二个地址。
adress1
adress2