Menu
Coddy logo textTech

HashMap annidate

Fa parte della sezione Logica e flusso del percorso Java di Coddy. Lezione 19 di 59.

Una HashMap annidata è una HashMap i cui valori sono a loro volta HashMap. Questo ti permette di organizzare dati complessi in modo gerarchico. Ad esempio, puoi avere una HashMap esterna che associa categorie (come "Electronics" o "Furniture") a HashMap interne che contengono prodotti e i relativi prezzi.

Crea una HashMap annidata: categorie -> (articoli -> prezzi)

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

Aggiungi una categoria "Electronics" con una HashMap interna vuota

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

Aggiungi un articolo "Laptop" con prezzo 1200 in "Electronics"

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

Verifica se la mappa esterna è vuota e stampa le sue dimensioni

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

In questo esempio, la mappa esterna ha una chiave ("Electronics") che corrisponde a una HashMap interna contenente la chiave "Laptop" e il suo valore 1200.

challenge icon

Sfida

Facile

Crea un metodo chiamato <b>printNestedInventory</b> che accetti in input una HashMap annidata chiamata inventory. In questo inventario:

  • Le chiavi sono categorie (ad es., "Electronics", "Furniture").
  • I valori sono HashMap interne in cui le chiavi sono i nomi dei prodotti e i valori sono i relativi prezzi.

Il tuo metodo dovrebbe stampare l'inventario nel seguente formato:

  • Per ogni categoria, stampa Category: <name>
  • Se la categoria contiene prodotti, stampali uno per riga nel formato Product: <name>, Price: <price> (con 2 spazi di rientro)
  • Se la categoria non contiene prodotti, stampa (No products) (con 2 spazi di rientro)

Esempio di output:

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

Nota: HashMap non garantisce l'ordine di iterazione, quindi l'ordine delle categorie e dei prodotti nel tuo output potrebbe essere diverso da quello dell'esempio precedente. È normale.

Nota: Dovrai importare java.util.Map oltre agli altri import forniti.

Provalo tu

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) {
        // Itera su ogni categoria dell'HashMap esterna
        // Per ogni categoria, stampa "Category: <name>"
        // Se la mappa interna è vuota, stampa "  (No products)"
        // Altrimenti, itera su ogni prodotto e stampa "  Product: <name>, Price: <price>"
        // Scrivi qui il tuo codice
    }

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

        // Converti la stringa JSON in una HashMap annidata
        Type inventoryType = new TypeToken<HashMap<String, HashMap<String, Integer>>>(){}.getType();
        HashMap<String, HashMap<String, Integer>> inventory = new Gson().fromJson(inventoryString, inventoryType);

        printNestedInventory(inventory);
    }
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Logica e flusso

Esercitati da solo: Compilatore Java online