Menu
Coddy logo textTech

ネストした HashMap

CoddyのJavaジャーニー「ロジックとフロー」セクションの一部。レッスン 19/59。

ネストされた HashMap は、値自体が HashMap である HashMap です。これにより、複雑なデータを階層的に整理できます。たとえば、カテゴリ(「Electronics」や「Furniture」など)を、商品とその価格を保持する inner HashMap に対応付ける outer HashMap を作成できます。

ネストされた HashMap を作成します:categories -> (items -> prices)

HashMap<String, HashMap<String, Integer>> inventory = new HashMap<>();

空の内部 HashMap を持つカテゴリ「Electronics」を追加します

inventory.put("Electronics", new HashMap<>());

価格 1200 のアイテム「Laptop」を「Electronics」に追加します

inventory.get("Electronics").put("Laptop", 1200);

外側のマップが空かどうかを確認し、そのサイズを出力する

System.out.println(inventory.isEmpty());
// 出力: false
System.out.println(inventory.size()); 
// 出力: 1

この例では、外側のmapには1つのキー("Electronics")があり、それがキー「Laptop」とその値1200を含む内側のHashMapにマッピングされています。

challenge icon

チャレンジ

簡単

<b>printNestedInventory</b>という名前のメソッドを作成し、入力としてinventoryという名前のネストされたHashMapを受け取るようにします。このインベントリでは:

  • キーはカテゴリです(例:"Electronics"、"Furniture")。
  • は、キーが商品名、値が商品の価格である内部HashMapです。

メソッドは、次の形式でインベントリを出力する必要があります:

  • 各カテゴリについて、Category: <name>を出力する
  • カテゴリに商品がある場合は、それぞれを Product: <name>, Price: <price>として出力する(インデントは2スペース)
  • カテゴリに商品がない場合は、 (No products)を出力する(インデントは2スペース)

出力例:

Category: Electronics
  Product: Laptop, Price: 1200
  Product: Smartphone, Price: 800
Category: Furniture
  Product: Chair, Price: 50
  Product: Table, Price: 150
Category: EmptyCategory
  (No products)

注:HashMapは反復処理の順序を保証しないため、出力されるカテゴリと商品の順序は上記の例と異なる場合があります。これは想定された動作です。

注:他に提供されているインポートに加えて、java.util.Mapをインポートする必要があります。

自分で試してみよう

import com.google.gson.Gson;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;

public class Main {
    public static void printNestedInventory(HashMap<String, HashMap<String, Integer>> inventory) {
        // 外側のHashMapの各カテゴリを反復処理する
        // 各カテゴリについて、"Category: <name>" を出力する
        // 内側のマップが空の場合、"  (No products)" を出力する
        // それ以外の場合、各製品を反復処理して "  Product: <name>, Price: <price>" を出力する
        // ここにコードを書いてください
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        String inventoryString = scanner.nextLine();

        // JSON文字列をネストされたHashMapに変換する
        Type inventoryType = new TypeToken<HashMap<String, HashMap<String, Integer>>>(){}.getType();
        HashMap<String, HashMap<String, Integer>> inventory = new Gson().fromJson(inventoryString, inventoryType);

        printNestedInventory(inventory);
    }
}
quiz icon腕試し

このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。

ロジックとフローのすべてのレッスン

自分で練習してみよう: Javaオンラインコンパイラ