Menu
Coddy logo textTech

Вложенный HashMap

Часть раздела Логика и управление потоком путешествия по Java на Coddy — урок 19 из 59.

Вложенная HashMap — это HashMap, значения которой сами являются HashMap. Это позволяет организовывать сложные данные иерархически. Например, вы можете иметь внешнюю HashMap, которая сопоставляет категории (например, «Electronics» или «Furniture») с внутренними HashMap, которые содержат продукты и их цены.

Создайте вложенную HashMap: категории -> (товары -> цены)

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

Добавьте категорию "Electronics" с пустой внутренней HashMap

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

Добавьте элемент "Laptop" с ценой 1200 в "Electronics"

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

Проверьте, пуст ли внешний словарь, и выведите его размер

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

В этом примере внешняя map имеет один ключ ("Electronics"), который отображает внутренний HashMap, содержащий ключ "Laptop" и его значение 1200.

challenge icon

Задание

Легко

Создайте метод с именем <b>printNestedInventory</b>, который принимает вложенную HashMap под названием inventory в качестве входного параметра. В этом инвентаре:

  • Ключи — это категории (например, "Electronics", "Furniture").
  • Значения — это внутренние HashMap, где ключи — это названия продуктов, а значения — их цены.

Ваш метод должен выводить инвентарь в следующем формате:

  • Для каждой категории выведите Category: <name>
  • Если категория имеет продукты, выведите каждый как Product: <name>, Price: <price> (с отступом в 2 пробела)
  • Если категория не имеет продуктов, выведите (No products) (с отступом в 2 пробела)

Пример вывода:

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

Примечание: HashMap не гарантирует порядок итерации, поэтому порядок категорий и продуктов в вашем выводе может отличаться от примера выше — это ожидаемо.

Примечание: Вам потребуется импортировать java.util.Map в дополнение к другим предоставленным импортам.

Шпаргалка

Вложенная HashMap — это HashMap, значениями которой сами являются HashMap, что позволяет организовывать данные иерархически.

Создайте вложенную HashMap:

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

Добавьте категорию с пустой внутренней HashMap:

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

Добавьте элемент во внутреннюю HashMap:

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

Проверьте, пуста ли внешняя HashMap, и получите её размер:

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

Попробуйте сами

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) {
        // Перебираем каждую категорию во внешнем HashMap
        // Для каждой категории выводим "Category: <name>"
        // Если внутренняя map пуста, выводим "  (No products)"
        // Иначе перебираем каждый продукт и выводим "  Product: <name>, Price: <price>"
        // Напишите код здесь
    }

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

        // Преобразуем JSON-строку во вложенную 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 iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Логика и управление потоком