Menu
CoddyTech

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ści same są obiektami 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 obiekty HashMap zawierające produkty i ich ceny.

Utwórz zagnieżdżoną HashMap: kategorie -> (elementy -> 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 wyświetl 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ą mapę HashMap zawierającą klucz "Laptop" i jego wartość 1200.

challenge icon

Wyzwanie

Łatwy

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

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

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

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

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, więc kolejność kategorii i produktów w wyniku może różnić się od tej w powyższym przykładzie. Jest to oczekiwane.

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