Map<String, String> phoneBook = people.stream()
.collect(toMap(Person::getName,
Person::getAddress));
java.lang.IllegalStateException: Duplicate key
重複した要素が見つかったときに取得します。
マップに値を追加するときにこのような例外を無視することは可能ですか?
重複がある場合は、その重複キーを無視して続行するだけです。
ベストアンサー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
同じキーに関連付けられた 2 つの値を操作する関数です。adress1
要素を収集するときに検出された最初のアドレスに対応し、adress2
検出された 2 番目のアドレスに対応します。このラムダは、最初のアドレスを保持し、2 番目のアドレスを無視するように指示するだけです。