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: 1Neste exemplo, o mapa externo tem uma chave ("Electronics") que mapeia para um HashMap interno contendo a chave "Laptop" e seu valor 1200.
Desafio
FácilCrie 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);
}
}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
1Arrays Multidimensionais
Básicos de Arrays 2DAcessando Elementos de Arrays 2DLoops Aninhados com Arrays 2DResumo - Arrays 2DAdição e Subtração de MatrizesArrays EscalonadosArrays 3D e AlémPadrões Comuns de Arrays 2DResumo - Tudo Sobre Arrays2HashMap Parte 1
O que é um HashMap?Declarar um HashMapAcessando ValoresVerificar se a Chave ExisteModificando DicionáriosResumo - HashMap3HashMap Parte 2
Métodos do HashMapIterar com keySet()Iterar com entrySet()HashMap AninhadoResumo - Gerenciar ArmazémResumo - Operações do HashMap6Fluxo de Controle Avançado
Declarações RotuladasExpressão SwitchCorrespondência de PadrõesCláusulas de GuardaResumo - Fluxo de Controle9Projeto - Contador de Palavras Únicas
Entrada e Armazenamento de TextoProcessamento de PalavrasPratique por conta própria: Compilador de Java online