【Java】Mapと2次元配列を相互変換する方法まとめ|初心者向けサンプル付き解説

お疲れ様です。はるさらと申します。

Javaで「2次元配列をMapに変換したい」
「Mapから2次元配列を作りたい」
という場面は、意外と多くあります。
特にCSVのような表形式データを扱うときや、
キーと値を整理して扱いたい場合
に便利です。

今回は、**「java map 2次元配列 変換」**のキーワードで検索している方向けに、
基本の変換方法から実務的な応用例、そして代替手段までをわかりやすく解説します。

こちらの記事を参照し、Mapと2次元配列を自在に変換できるスキル
向上に役立てていただければ幸いです。


Mapと2次元配列の変換とは?

まず、「Map」と「2次元配列」
それぞれどんな構造をしているかを整理しておきましょう。

  • Map:キーと値のペアを格納(例:Map<String, Integer>
  • 2次元配列:行と列で構成される配列(例:String[][]

これを相互に変換すると、

  • Map → [キー][値] のような2次元配列
  • 2次元配列 → Map(キーと値をペアとして登録)
    ができるようになります。

基本例:Mapを2次元配列に変換する方法

まずは、最も基本的な例です。
Map<String, String>String[][]に変換してみましょう。

import java.util.*;

public class MapToArrayExample {
    public static void main(String[] args) {
        Map<String, String> map = new LinkedHashMap<>();
        map.put("apple", "100");
        map.put("banana", "200");
        map.put("orange", "300");

        // Mapを2次元配列に変換
        String[][] array = new String[map.size()][2];
        int i = 0;
        for (Map.Entry<String, String> entry : map.entrySet()) {
            array[i][0] = entry.getKey();
            array[i][1] = entry.getValue();
            i++;
        }

        // 実行結果表示
        for (String[] row : array) {
            System.out.println(Arrays.toString(row));
        }
    }
}

実行結果:

[apple, 100]
[banana, 200]
[orange, 300]

このように、Mapのキーと値を1行ずつ2次元配列に格納できます。
LinkedHashMapを使えば登録順を維持できる点もポイントです。


実務利用例:2次元配列からMapへ変換する

次に、逆方向の「2次元配列 → Map」変換を見てみましょう。
例えば、設定情報やCSVを読み取ったあとにMap化したいときなどに使えます。

import java.util.*;

public class ArrayToMapExample {
    public static void main(String[] args) {
        String[][] data = {
            {"id", "001"},
            {"name", "Alice"},
            {"score", "90"}
        };

        Map<String, String> map = new LinkedHashMap<>();
        for (String[] row : data) {
            if (row.length >= 2) {
                map.put(row[0], row[1]);
            }
        }

        System.out.println(map);
    }
}

実行結果:

{id=001, name=Alice, score=90}

このように、2列の配列をMapのキー・値ペアに変換できます。
要素数が2未満の場合は無視するなど、
安全性を考慮した処理も入れておくと安心です。


応用例:Map<String, List<String>>を2次元配列に変換する

他にも実務では、値に複数のデータを持たせたい場合があります。
たとえば「クラスごとの生徒リスト」を2次元配列に変換したいケースなど。

import java.util.*;

public class MapListToArrayExample {
    public static void main(String[] args) {
        Map<String, List<String>> classMap = new LinkedHashMap<>();
        classMap.put("A", Arrays.asList("Alice", "Bob"));
        classMap.put("B", Arrays.asList("Charlie", "David"));

        List<String[]> list = new ArrayList<>();
        for (Map.Entry<String, List<String>> entry : classMap.entrySet()) {
            for (String student : entry.getValue()) {
                list.add(new String[]{entry.getKey(), student});
            }
        }

        String[][] result = list.toArray(new String[0][]);

        for (String[] row : result) {
            System.out.println(Arrays.toString(row));
        }
    }
}

実行結果:

[A, Alice]
[A, Bob]
[B, Charlie]
[B, David]

このようにして、1つのキーに複数の値を持つ構造も柔軟に2次元配列へ展開できます。
ArrayListを経由してサイズ可変の構造を作ってから、
toArray()で固定配列化するのがポイントです。


代替手法との比較:ListやStreamを使う場合

Java 8以降なら、Stream APIを使ってもっと簡潔に書くこともできます。
たとえばMapを2次元配列に変換するには次のように書けます。

import java.util.*;
import java.util.stream.*;

public class MapStreamExample {
    public static void main(String[] args) {
        Map<String, String> map = Map.of("x", "10", "y", "20", "z", "30");

        String[][] array = map.entrySet().stream()
                .map(e -> new String[]{e.getKey(), e.getValue()})
                .toArray(String[][]::new);

        System.out.println(Arrays.deepToString(array));
    }
}

実行結果:

[[x, 10], [y, 20], [z, 30]]

Streamを使えば、ループ構文を明示的に書かずに変換処理を一行で表現できます。
ただし、可読性より簡潔さを重視するコードなので、
経験の浅い方には最初はループ方式の方が理解しやすいでしょう。


注意点とよくある間違い

  • Mapを2次元配列に変換するとき、
    配列サイズをmap.size()で指定するのを忘れると
    NullPointerExceptionになります。
  • 2次元配列からMapに変換するとき、キーが重複すると後の値で上書きされます。
    必要に応じてListなどでまとめましょう。
  • Streamで変換する場合、順序保証が必要ならLinkedHashMapを使用してください。

まとめ

本記事では、

  • Mapを2次元配列に変換する基本例
  • 2次元配列からMapを生成する方法
  • Map<List>型の応用変換
  • Streamによる代替実装
    をそれぞれ紹介しました。

Mapと2次元配列の変換は、データを柔軟に構造化するための基礎スキルです。
特にCSVや設定ファイルの読み込み、
Webアプリでのフォーム入力値管理などでも役立ちます。

関連して、以下の記事も参考になります:

どなたかのお役に立てば幸いです。
それではまたー!