List<Beans>をMapにlambdaを使って一文で変換する--Keyが重複するとき

2016/06/25

List<Beans>をMapにlambdaを使って一文で変換するの続きで、MapのKeyが重複するときの対処方法。

単純にListからMapに変換するには
Collectors.toMap(Function keyMapper, Function valueMapper)
でKey, Valueをそれぞれ指定できる。

もしKeyがかぶると、IllegalStateExceptionが起きてしまう。
この場合は、
Collectors.toMap(Function<? super T, ? extends K> keyMapper, Function<? super T, ? extends U> valueMapper, BinaryOperator<U> mergeFunction)
を使用し、mergeFunctionでかぶった二つの値をどうするか指定する。

型情報のBinaryOperator<U>が示す通り、mergeFunctionに渡される型と返す型はUで、valueMapperで定義される値が二つ(つまり一つ目のKeyと二つ目のKeyに対応するそれぞれのValue)渡される。

同じことは集計関数を使用しても実現できる。
集計関数を使用するとCollectorsクラスを大量に使うことがあり、staticインポートしておいた方が、コードが綺麗になる。
import static java.util.stream.Collectors.*;

-Java
-,