1. ホーム

[解決済み】ストリームを使った地図作成で重複を無視する。

2022-03-26 18:47:32

質問

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

私は java.lang.IllegalStateException: Duplicate key 重複した要素が見つかった場合

マップに値を追加する際に、このような例外を無視することは可能でしょうか?

重複している場合は、その重複しているキーを無視して継続する必要があります。

どのように解決するのですか?

を使用することで可能です。 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番目のアドレスを無視することを指示するだけである。