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 otros HashMaps. Esto te permite organizar datos complejos de manera jerárquica. Por ejemplo, puedes tener un HashMap exterior que mapea categorías (como «Electronics» o «Furniture») a HashMaps interiores que contienen productos y sus precios.

Crear un HashMap anidado: categorías -> (ítems -> 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 un elemento "Laptop" con precio 1200 en "Electronics"

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

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

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

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

challenge icon

Desafío

Fácil

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

  • Claves son categorías (p. ej., "Electronics", "Furniture").
  • Valores son HashMaps internos donde las claves son nombres de productos y los valores son sus precios.

Tu método debe imprimir el inventario en 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 tiene ningún producto, imprime (No products) (con 2 espacios de sangría)

Ejemplo de salida:

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 categorías y productos en tu salida puede diferir del ejemplo anterior — esto es esperado.

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

Hoja de referencia

Un HashMap anidado es un HashMap cuyos valores son a su vez otros HashMaps, lo que permite la organización de datos de forma jerárquica.

Crear un HashMap anidado:

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

Agregar una categoría con un HashMap interno vacío:

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

Agregar un artículo al HashMap interno:

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

Verificar si el mapa externo está vacío y obtener su tamaño:

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

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) {
        // Iterar sobre cada categoría en el HashMap exterior
        // Para cada categoría, imprimir "Category: <name>"
        // Si el mapa interior está vacío, imprimir "  (No products)"
        // De lo contrario, iterar sobre cada producto e imprimir "  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();

        // Convertir la cadena JSON a HashMap anidado
        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