[Java] Stream でキー重複する List から 値が List の Map に変換

JavastreamAPI

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 を生成する。

Java Collector

Posted by Agopeanuts