Java8のCollectors.toMap()の使い方
Collectors.toMap()を使うことによって、ListからMapに変換することができます。
List<Dto> dataList = Arrays.asList( new Dto(1, "sample1"), new Dto(2, "sample2"), new Dto(3, "sample3"), new Dto(4, "sample4") ); Map<Integer, String> map = dataList.stream().collect( Collectors.toMap( d -> d.getAge(), d -> d.getName(), (oldVal,newVal) -> newVal, LinkedHashMap::new));
引数の意味は以下の通りです。
引数 | 意味 |
---|---|
第一引数 | Mapのkey |
第二引数 | Mapのvalue |
第三引数 | key重複時に先勝ちか後勝ちか |
第四引数 | Mapインタフェースを実装したクラス |
第三引数は、キーが重複した場合にどちらを優先するかを指定します。上記の場合は後勝ちになります。
List<Dto> dataList = Arrays.asList( new Dto(1, "sample1"), new Dto(2, "sample2"), new Dto(3, "sample3"), new Dto(4, "sample4") );
dataListを上記に変更するとmapの中身は以下のようになります。
{1=sample1, 2=sample2, 3=sample3, 4=sample4}
次に重複しているケースで
List<Dto> dataList = Arrays.asList( new Dto(1, "sample1"), new Dto(2, "sample2"), new Dto(3, "sample3"), new Dto(3, "sample4") );
dataListを上記に変更するとmapの中身は以下のようになります。
{1=sample1, 2=sample2, 3=sample4}
java.lang.IllegalStateException: Duplicate key
第三引数を省略すると、デフォルトでは重複エラーになります。
final List<Dto> dataList = Arrays.asList(new Dto(1, "sample1"), new Dto(2, "sample2"), new Dto(3, "sample3"), new Dto(3, "sample4")); final Map<Integer, String> result = dataList.stream() .collect(Collectors.toMap(d -> d.getAge(), d -> d.getName()));

KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^
コメント