Map修羅道:Step07

0003_Map修羅道-step07 learn

📌 まずは問題を見ろ

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


問題のポイント

  • Map<String, Map<String, Integer>> を使ったネスト構造の管理
  • 外側:店舗名 → 内側:商品名 → 値:在庫数
  • 2段階で containsKey() を使い、Mapの初期化をミスらないように

まず、日本語で考えろ

  • 複数の店舗がある。
  • 各店舗ごとに、いろんな商品の在庫がある。
  • 店舗ごとにMapを持たせる必要がある
  • 出力形式は:
Tokyo:
Apple → 10
Banana → 5


コメントを書け

// 店舗ごとの在庫Mapを持つMap(Map<String, Map<String, Integer>>)を作る
// 店舗と商品と在庫数を登録する
// 店舗ごとに商品と在庫を出力する(2重ループ)

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

import java.util.*;

public class MapUtil {
    public static void printStoreInventory() {
        // 店舗ごとの在庫Mapを持つMap(Map<String, Map<String, Integer>>)を作る
        Map<String, Map<String, Integer>> storeInventory = new HashMap<>();

        // データ登録:Tokyo店
        addStock(storeInventory, "Tokyo", "Apple", 10);
        addStock(storeInventory, "Tokyo", "Banana", 5);

        // データ登録:Osaka店
        addStock(storeInventory, "Osaka", "Apple", 7);
        addStock(storeInventory, "Osaka", "Orange", 3);

        // 店舗ごとに商品と在庫を出力する(2重ループ)
        for (String store : storeInventory.keySet()) {
            System.out.println(store + ":");
            Map<String, Integer> stockMap = storeInventory.get(store);
            for (String item : stockMap.keySet()) {
                System.out.println(item + " → " + stockMap.get(item));
            }
        }
    }

    // 在庫を登録する共通処理
    private static void addStock(Map<String, Map<String, Integer>> inventory,
                                 String store, String item, int count) {
        if (!inventory.containsKey(store)) {
            inventory.put(store, new HashMap<>());
        }
        inventory.get(store).put(item, count);
    }
}

実行結果の例(順不同)

Tokyo:
Apple → 10
Banana → 5
Osaka:
Apple → 7
Orange → 3

コードの解説

  • 外側のMapが「店舗 → 商品Map」、内側のMapが「商品名 → 在庫数」。
  • addStock() メソッド内で、外側のMapにその店舗がなければ内側Mapを初期化
  • 2重ループで、外側 → 内側の順に出力。構造を順にたどるイメージ。

つまづきやすいポイント

  • Map<String, Map<...>> は、「構造」としてちゃんと図にして理解しないと混乱する。
  • 外側のMapに対して containsKey() で確認し、内側Mapを new してから使うことを忘れがち。
  • 出力も2重ループ。ループの中で何をループしているのか、構造に即して考えろ。

teshのひとこと

Mapの中にMap。
構造が増えたとたん、頭の中が混乱して止まるやつが続出や。

でもな、複雑なのは構造じゃなくて、おまえの思考のほうや。
図に描け。言葉で説明しろ。それができたら、ネストは怖くない。


Just keep typing, baby.
階層を読め。構造を重ねて、現実を支配しろ。


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