[Java] Stream でキー重複する List から 値が List の Map に変換
Map に変換するとキーが重複するリストを、Stream で Map<Key, List型のValue> の形に変換する。
List<Foo> list = Arrays.asList(
new Foo(100, "AAA"),
new Foo(100, "BBB"),
new Foo(101, "CCC"),
new Foo(102, "AAA"));
Map<Integer, List<String>> map = list.stream()
.collect(Collectors.groupingBy(Foo::getId,
Collectors.mapping(Foo::getName, Collectors.toList())));
System.out.println(map);
出力結果
{100=[AAA, BBB], 101=[CCC], 102=[AAA]}
Stream#collect
は、処理結果を他のクラスに変換するためのメソッド。Collectors
クラスの groupingBy
メソッドを使って、 id
でグルーピングする。Collectors
クラスの mapping
メソッドを使って、 name
の List
を生成する。