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(ES20xx),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^


コメント