Menu
Coddy logo textTech

HashMap Aninhado

Parte da seção Lógica e Fluxo do Journey de Java da Coddy. Lição 19 de 59.

Um HashMap aninhado é um HashMap cujos valores são, por sua vez, HashMaps. Isso permite organizar dados complexos hierarquicamente. Por exemplo, você pode ter um HashMap externo que mapeia categorias (como "Electronics" ou "Furniture") para HashMaps internos que armazenam produtos e seus preços.

Crie um HashMap aninhado: categorias -> (itens -> preços)

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

Adicione uma categoria "Electronics" com um HashMap interno vazio

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

Adicione um item "Laptop" com preço 1200 em "Electronics"

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

Verifique se o mapa outer está vazio e imprima seu tamanho

System.out.println(inventory.isEmpty());
// Saída: false
System.out.println(inventory.size()); 
// Saída: 1

Neste exemplo, o mapa externo tem uma chave ("Electronics") que mapeia para um HashMap interno contendo a chave "Laptop" e seu valor 1200.

challenge icon

Desafio

Fácil

Crie um método chamado <b>printNestedInventory</b> que receba um HashMap aninhado chamado inventory como entrada. Nesse inventário:

  • Chaves são categorias (por exemplo, "Electronics", "Furniture").
  • Valores são HashMaps internos cujas chaves são nomes de produtos e cujos valores são seus preços.

Seu método deve imprimir o inventário no seguinte formato:

  • Para cada categoria, imprima Category: <name>
  • Se a categoria tiver produtos, imprima cada um como Product: <name>, Price: <price> (com 2 espaços de indentação)
  • Se a categoria não tiver produtos, imprima (No products) (com 2 espaços de indentação)

Saída de exemplo:

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

Observação: HashMap não garante a ordem de iteração, portanto a ordem das categorias e dos produtos na sua saída pode ser diferente da apresentada no exemplo acima. Isso é esperado.

Observação: Você precisará importar java.util.Map além das outras importações fornecidas.

Experimente você mesmo

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) {
        // Itere sobre cada categoria no HashMap externo
        // Para cada categoria, imprima "Category: <name>"
        // Se o mapa interno estiver vazio, imprima "  (No products)"
        // Caso contrário, itere sobre cada produto e imprima "  Product: <name>, Price: <price>"
        // Escreva seu código aqui
    }

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

        // Converta a string JSON para HashMap aninhado
        Type inventoryType = new TypeToken<HashMap<String, HashMap<String, Integer>>>(){}.getType();
        HashMap<String, HashMap<String, Integer>> inventory = new Gson().fromJson(inventoryString, inventoryType);

        printNestedInventory(inventory);
    }
}
quiz iconTeste seus conhecimentos

Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.

Todas as lições de Lógica e Fluxo

Pratique por conta própria: Compilador de Java online