読者です 読者をやめる 読者になる 読者になる

Collectors.toMapで、同一キーを処理する #java

streamでMapに詰める

Javaのstreamを使ってMapにつめかえる場合、Collectors.toMapを使う。

Map<Long, String> fooMap = fooList.stream()
  .collect(Collectors.toMap(
     Foo::getId,
     Foo::getName
  );

しかし上記の場合だと、キーが重複していた場合に IllegalStateException が発生する。

同一キーを処理する

これを防ぐには、第三引数で同一キーに対する値を受け取れるので、処理を追加する。

Map<Long, String> fooMap = fooList.stream()
  .collect(Collectors.toMap(
     Foo::getId,
     Foo::getName,
     // この場合、先勝ちにしている
     (name1, name2) -> name1
   );

参考

fits.hatenablog.com