Map修羅道:Step03

0003_Map修羅道-step03 learn

📌 まずは問題を見ろ

→ javadrill.tech で出題された問題を見る(Step03)


問題のポイント

  • Map<String, List<String>> というネスト構造の基本
  • put() だけじゃダメ。Listの存在を確認してから追加する必要がある
  • 「同じキーに複数の値」=Listを使って“蓄積”せよ

まず、日本語で考えろ

  • 「カテゴリ名」ごとに「商品名」がいくつも登録される
  • 1カテゴリ=1商品、じゃない
  • Food"Apple", "Banana", "Orange" を追加してみろ
  • そのために、どういうMapが必要か?

コメントを書け

// Map<String, List<String>> を作る
// put() じゃなく List に add() する形式で登録する
// カテゴリごとに商品リストを出力する

コメントに従ってコードを書け

import java.util.*;

public class MapUtil {
    public static void printCategoryMap() {
        // Map<String, List<String>> を作る
        Map<String, List<String>> categoryMap = new HashMap<>();

        // 商品をカテゴリごとに追加("Food" に3つ、"Clothing" に2つ)
        addItem(categoryMap, "Food", "Apple");
        addItem(categoryMap, "Food", "Banana");
        addItem(categoryMap, "Clothing", "T-shirt");
        addItem(categoryMap, "Clothing", "Jeans");
        addItem(categoryMap, "Food", "Orange");

        // カテゴリごとに商品リストを出力する
        for (String category : categoryMap.keySet()) {
            System.out.print(category + ":  ");
            for (String item : categoryMap.get(category)) {
                System.out.print(item + "  ");
            }
            System.out.println();
        }
    }

    // 指定カテゴリに商品を追加する共通処理
    private static void addItem(Map<String, List<String>> map, String category, String item) {
        if (!map.containsKey(category)) {
            map.put(category, new ArrayList<>());
        }
        map.get(category).add(item);
    }
}

実行結果の例(順不同)

Food:  Apple  Banana  Orange  
Clothing:  T-shirt  Jeans  

コードの解説

  • Map<String, List<String>> を使うことで、1カテゴリに複数の商品を持てる
  • addItem() メソッドで、List が存在しない場合は new ArrayList<>() を作成。
  • map.get(key).add(...) で、List に要素を追加。
  • 2重の for 文でカテゴリと商品を1つずつ出力。

つまづきやすいポイント

  • 最初から List があるとは限らない。キーがなければ List を new する必要あり
  • map.put(key, new ArrayList<>()) を忘れると NullPointerException が出る。
  • Map<String, List<>> は「配列のMap」ではなく「Mapの中にListがある」構造や。図に描けるようになれ。

teshのひとこと

「ひとつのキーに複数の値」──それ、Mapだけじゃ完結せえへん。
Mapの中にListを持たせることで、“まとまり”が生まれる。

そしてこの構造は、現実世界のデータ管理の基本や。


Just keep typing, baby.
ネストを恐れるな。構造を重ねろ。おまえのコードに現実を写せ。


👉 Map修羅道:全体のステップ構成はこちら