ストリームを使用してマップを作成するときに重複を無視する 質問する

ストリームを使用してマップを作成するときに重複を無視する 質問する
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 番目のアドレスを無視するように指示するだけです。

おすすめ記事