Menu
Coddy logo textTech

HashMap Anidado

Parte de la sección Lógica y Flujo del Journey de Java de Coddy. Lección 19 de 59.

Un HashMap anidado es un HashMap cuyos valores son, a su vez, HashMaps. Esto te permite organizar datos complejos jerárquicamente. Por ejemplo, puedes tener un HashMap externo que asigne categorías (como "Electronics" o "Furniture") a HashMaps internos que contengan productos y sus precios.

Crea un HashMap anidado: categorías -> (artículos -> precios)

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

Añade una categoría «Electronics» con un HashMap interno vacío

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

Añade el artículo "Laptop" con un precio de 1200 a "Electronics"

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

Comprueba si el mapa exterior está vacío e imprime su tamaño

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

En este ejemplo, el mapa exterior tiene una clave ("Electronics") que se asigna a un HashMap interno que contiene la clave "Laptop" y su valor 1200.

challenge icon

Desafío

Fácil

Crea un método llamado <b>printNestedInventory</b> que reciba como entrada un HashMap anidado llamado inventory. En este inventario:

  • Las claves son categorías (por ejemplo, "Electronics", "Furniture").
  • Los valores son HashMap internos cuyas claves son nombres de productos y cuyos valores son sus precios.

Tu método debe imprimir el inventario con el siguiente formato:

  • Para cada categoría, imprime Category: <name>
  • Si la categoría tiene productos, imprime cada uno como Product: <name>, Price: <price> (con 2 espacios de sangría)
  • Si la categoría no tiene productos, imprime (No products) (con 2 espacios de sangría)

Salida de ejemplo:

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 no garantiza el orden de iteración, por lo que el orden de las categorías y los productos en tu salida puede diferir del ejemplo anterior. Esto es lo esperado.

Nota: Necesitarás importar java.util.Map además de las otras importaciones proporcionadas.

Pruébalo tú mismo

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 sobre cada categoría en el HashMap exterior
        // Para cada categoría, imprime "Category: <name>"
        // Si el mapa interior está vacío, imprime "  (No products)"
        // De lo contrario, itera sobre cada producto e imprime "  Product: <name>, Price: <price>"
        // Escribe tu código aquí
    }

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

        // Convierte la cadena JSON a Nested 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 iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Lógica y Flujo

Practica por tu cuenta: Compilador de Java online