Menu
Coddy logo textTech

HashMap imbriqué

Fait partie de la section Logique & Flux du Journey Java de Coddy. Leçon 19 sur 59.

Un HashMap imbriqué est un HashMap dont les valeurs sont elles-mêmes des HashMaps. Cela vous permet d’organiser des données complexes de manière hiérarchique. Par exemple, vous pouvez avoir un HashMap externe qui associe des catégories (comme « Electronics » ou « Furniture ») à des HashMaps internes contenant des produits et leurs prix.

Créez une HashMap imbriquée : catégories -> (articles -> prix)

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

Ajoutez une catégorie « Electronics » avec un HashMap interne vide

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

Ajoutez un article « Laptop » au prix de 1200 dans « Electronics »

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

Vérifiez si la map outer est vide et affichez sa taille

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

Dans cet exemple, la map externe possède une clé (« Electronics ») qui correspond à une HashMap interne contenant la clé « Laptop » et sa valeur 1200.

challenge icon

Défi

Facile

Créez une méthode nommée <b>printNestedInventory</b> qui prend en entrée une HashMap imbriquée appelée inventory. Dans cet inventaire :

  • Les clés sont des catégories (par exemple, "Electronics", "Furniture").
  • Les valeurs sont des HashMap internes dont les clés sont les noms des produits et les valeurs, leurs prix.

Votre méthode doit afficher l'inventaire au format suivant :

  • Pour chaque catégorie, affichez Category: <name>
  • Si la catégorie contient des produits, affichez chacun sous la forme Product: <name>, Price: <price> (avec 2 espaces d'indentation)
  • Si la catégorie ne contient aucun produit, affichez (No products) (avec 2 espaces d'indentation)

Exemple de sortie :

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

Remarque : HashMap ne garantit pas l'ordre d'itération. L'ordre des catégories et des produits dans votre sortie peut donc différer de celui de l'exemple ci-dessus. C'est normal.

Remarque : Vous devrez importer java.util.Map en plus des autres imports fournis.

Essayez vous-même

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) {
        // Parcourir chaque catégorie dans le HashMap externe
        // Pour chaque catégorie, afficher "Category: <name>"
        // Si la map interne est vide, afficher "  (No products)"
        // Sinon, parcourir chaque produit et afficher "  Product: <name>, Price: <price>"
        // Écrivez votre code ici
    }

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

        // Convertir la chaîne JSON en HashMap imbriqué
        Type inventoryType = new TypeToken<HashMap<String, HashMap<String, Integer>>>(){}.getType();
        HashMap<String, HashMap<String, Integer>> inventory = new Gson().fromJson(inventoryString, inventoryType);

        printNestedInventory(inventory);
    }
}
quiz iconTestez-vous

Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.

Toutes les leçons de Logique & Flux

Entraînez-vous par vous-même : Compilateur Java en ligne