この記事は90%~100%ChatGPTで作られています。
この記事は90%~100%ChatGPTで作られています。
この記事は90%~100%ChatGPTで作られています。
ぜひこちらの記事もご覧ください!!
転職回数4回(独立系⇒メーカー系⇒社内SE⇒SES)の私がSESのメリットについて書きました!
JavaでListをMapに変換する方法
プログラミング言語Javaでは、コレクションというデータ構造を扱うためのフレームワークが提供されています。
この記事では、「JavaでListをMapに変換する方法」について詳しく解説します。
初心者から中級者まで、実践的なコード例とその出力結果を交えて、わかりやすく説明します。

1. Java8のStreamを利用した変換
Java8から導入されたStream APIを使用すると、リストからマップへの変換を簡単に行うことができます。
以下に、Streamを使用してListをMapに変換する簡単な例を示します。
ソースコード例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
import java.util.*; import java.util.stream.*; public class Program { public static void main(String[] args) { List<String> list = Arrays.asList("Apple", "Banana", "Cherry"); Map<Integer, String> map = list.stream() .collect(Collectors.toMap( item -> item.length(), item -> item )); System.out.println(map); } } |
出力結果
{5=Apple, 6=Banana, 6=Cherry}

2. Java8のStreamを利用した変換(複雑な例)
次に、より複雑なリストからマップへの変換を考えてみましょう。
この例では、オブジェクトのリストをマップに変換します。
ソースコード例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
import java.util.*; import java.util.stream.*; public class Program { static class Fruit { private String name; private String color; Fruit(String name, String color) { this.name = name; this.color = color; } public String getName() { return name; } public String getColor() { return color; } } public static void main(String[] args) { List<Fruit> list = Arrays.asList( new Fruit("Apple", "Red"), new Fruit("Banana", "Yellow"), new Fruit("Cherry", "Red") ); Map<String, String> map = list.stream() .collect(Collectors.toMap( Fruit::getName, Fruit::getColor )); System.out.println(map); } } |
出力結果
{Apple=Red, Banana=Yellow, Cherry=Red}

3. グループ化を利用した変換
リストからマップへの変換時に、同じキーを持つ要素をグループ化することも可能です。
以下の例では、色ごとにフルーツをグループ化します。
ソースコード例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 |
import java.util.*; import java.util.stream.*; public class Program { static class Fruit { private String name; private String color; Fruit(String name, String color) { this.name = name; this.color = color; } public String getName() { return name; } public String getColor() { return color; } } public static void main(String[] args) { List<Fruit> list = Arrays.asList( new Fruit("Apple", "Red"), new Fruit("Banana", "Yellow"), new Fruit("Cherry", "Red") ); Map<String, List<String>> map = list.stream() .collect(Collectors.groupingBy( Fruit::getColor, Collectors.mapping(Fruit::getName, Collectors.toList()) )); System.out.println(map); } } |
出力結果
{Red=[Apple, Cherry], Yellow=[Banana]}

4. マップへの変換時に既存のキーを上書きする
デフォルトでは、マップへの変換時に既存のキーと同じキーを持つ要素があると、例外がスローされます。
しかし、Collectorのオーバーロードされたバージョンを使えば、新しい要素によって既存のキーを上書きすることができます。
ソースコード例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
import java.util.*; import java.util.stream.*; public class Program { static class Fruit { private String name; private String color; Fruit(String name, String color) { this.name = name; this.color = color; } public String getName() { return name; } public String getColor() { return color; } } public static void main(String[] args) { List<Fruit> list = Arrays.asList( new Fruit("Apple", "Red"), new Fruit("Banana", "Yellow"), new Fruit("Cherry", "Red"), new Fruit("Strawberry", "Red") ); Map<String, String> map = list.stream() .collect(Collectors.toMap( Fruit::getColor, Fruit::getName, (oldValue, newValue) -> newValue )); System.out.println(map); } } |
出力結果
{Red=Strawberry, Yellow=Banana}

5. マップの値に対する操作
マップの値に対して特定の操作を行いたい場合もあります。
そのような場合は、各要素をマップに変換する際に指定する関数に操作を追加します。
次の例では、マップの値を大文字にします。
ソースコード例
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
import java.util.*; import java.util.stream.*; public class Program { static class Fruit { private String name; private String color; Fruit(String name, String color) { this.name = name; this.color = color; } public String getName() { return name; } public String getColor() { return color; } } public static void main(String[] args) { List<Fruit> list = Arrays.asList( new Fruit("Apple", "Red"), new Fruit("Banana", "Yellow"), new Fruit("Cherry", "Red"), new Fruit("Strawberry", "Red") ); Map<String, String> map = list.stream() .collect(Collectors.toMap( Fruit::getColor, fruit -> fruit.getName().toUpperCase() )); System.out.println(map); } } |
出力結果
{Red=STRAWBERRY, Yellow=BANANA}

まとめ
Javaのリストからマップへの変換は、リストに含まれる要素をキーと値の組み合わせに変換する便利な方法です。
今回は、JavaのStream APIとCollectorsクラスを使った方法を見てきましたが、他にもさまざまな方法が存在します。
例えば、古いバージョンのJavaでは、forループやIteratorを使って手動で変換を行うことも可能です。
しかしながら、Stream APIを使うと、より簡潔に、そしてパフォーマンスも良くなることが多いです。
これを機に、Javaのリストとマップをうまく使いこなすことで、より良いコードを書くことができるようになってみてはいかがでしょうか。
最後まで読んで頂き、ありがとうございました。少しでもお役にたてたなら幸いです!

ぜひこちらの記事もご覧ください!!
転職回数4回(独立系⇒メーカー系⇒社内SE⇒SES)の私がSESのメリットについて書きました!
私は下記のサイトで現在の働き方、フルリモート(週5)の企業に出会うことができました。
今でもとても感謝しています!カウンセリングは無料なので、ぜひどうぞ!
この記事は90%~100%ChatGPTで作られています。
この記事は90%~100%ChatGPTで作られています。
この記事は90%~100%ChatGPTで作られています。