Menu
Coddy logo textTech

Zagnieżdżona HashMap

Część sekcji Logika i przepływ sterowania ścieżki Java w Coddy. Lekcja 19 z 59.

Zagnieżdżona HashMap to HashMap, której wartościami są inne HashMap. Dzięki temu możesz organizować złożone dane hierarchicznie. Na przykład możesz mieć zewnętrzną HashMap, która mapuje kategorie (takie jak "Electronics" lub "Furniture") na wewnętrzne HashMap zawierające produkty i ich ceny.

Utwórz zagnieżdżoną HashMap: kategorie -> (przedmioty -> ceny)

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

Dodaj kategorię „Electronics” z pustą wewnętrzną mapą HashMap

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

Dodaj element „Laptop” o cenie 1200 do „Electronics”

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

Sprawdź, czy zewnętrzna mapa jest pusta, i wypisz jej rozmiar

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

W tym przykładzie zewnętrzna mapa ma jeden klucz („Electronics”), który wskazuje na wewnętrzną HashMap zawierającą klucz „Laptop” i jego wartość 1200.

challenge icon

Wyzwanie

Łatwy

Utwórz metodę o nazwie <b>printNestedInventory</b>, która jako dane wejściowe przyjmuje zagnieżdżoną HashMap o nazwie inventory. W tej strukturze:

  • Kluczami są kategorie (np. "Electronics", "Furniture").
  • Wartościami są wewnętrzne HashMap, w których kluczami są nazwy produktów, a wartościami ich ceny.

Twoja metoda powinna wypisać zawartość struktury w następującym formacie:

  • Dla każdej kategorii wypisz Category: <name>
  • Jeśli kategoria zawiera produkty, wypisz każdy z nich jako Product: <name>, Price: <price> (z wcięciem wynoszącym 2 spacje)
  • Jeśli kategoria nie zawiera produktów, wypisz (No products) (z wcięciem wynoszącym 2 spacje)

Przykładowy wynik:

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

Uwaga: HashMap nie gwarantuje kolejności iteracji, dlatego kolejność kategorii i produktów w wyniku może różnić się od podanej w przykładzie. To oczekiwane zachowanie.

Uwaga: Oprócz pozostałych podanych importów musisz zaimportować java.util.Map.

Spróbuj swoich sił

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) {
        // Przejdź przez każdą kategorię w zewnętrznym HashMap
        // Dla każdej kategorii wypisz "Category: <name>"
        // Jeśli wewnętrzna mapa jest pusta, wypisz "  (No products)"
        // W przeciwnym razie przejdź przez każdy produkt i wypisz "  Product: <name>, Price: <price>"
        // Wpisz tutaj swój kod
    }

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

        // Przekształć ciąg JSON w zagnieżdżony 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 iconSprawdź się

Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.

Wszystkie lekcje w sekcji Logika i przepływ sterowania

Poćwicz samodzielnie: Kompilator Java online