Перейти к содержанию

Как сохранить HashMap внутри List

В этом руководстве обсудим, как хранить HashMap внутри List в Java. Во-первых, будет краткое объяснение структур данных HashMap и List в Java. Затем напишем простой код для решения проблемы.

HashMap и List в Java

Java предоставляет различные структуры данных с различными свойствами и характеристиками для хранения объектов. HashMap – это набор пар ключ-значение, который сопоставляет уникальный ключ со значением. List содержит последовательность объектов одного типа.

В эти структуры данных можно поместить как простые значения, так и сложные объекты.

Сохранение HashMap<String, ArrayList<String>> внутри List

Рассмотрим простой пример, в котором создаем список HashMaps. Для каждой категории книг существует HashMap, который сопоставляет название книги с ее авторами.

Во-первых, определяем javaBookAuthorsMap, который сопоставляет название книги, связанной с Java, со списком ее авторов:

HashMap<String, List<String>> javaBooksAuthorsMap = new HashMap<>();

Кроме того, определяем phpBooksAuthorsMap для хранения имени и авторов книги для категории PHP:

HashMap<String, List<String>> phpBooksAuthorsMap = new HashMap<>();

Затем определяем booksAuthorsMapsList для хранения HashMaps для разных категорий:

List<HashMap<String, List<String>>> booksAuthorsMapsList = new ArrayList<>();

В результате получили список, содержащий две HashMaps. Чтобы проверить это, можно поместить информацию о некоторых книгах в списки javaBookAuthorsMap и phpBooksAuthorsMap. Затем добавляем их в список booksAuthorsMapsList. Наконец, убеждаемся, что HashMaps добавлены в List.

Посмотрим на модульный тест ниже:

@Test
public void givenMaps_whenAddToList_thenListContainsMaps() {
    HashMap<String, List<String>> javaBooksAuthorsMap = new HashMap<>();
    HashMap<String, List<String>> phpBooksAuthorsMap = new HashMap<>();
    javaBooksAuthorsMap.put("Head First Java", Arrays.asList("Kathy Sierra", "Bert Bates"));
    javaBooksAuthorsMap.put("Effective Java", Arrays.asList("Joshua Bloch"));
    javaBooksAuthorsMap.put("OCA Java SE 8",
      Arrays.asList("Kathy Sierra", "Bert Bates", "Elisabeth Robson"));
    phpBooksAuthorsMap.put("The Joy of PHP", Arrays.asList("Alan Forbes"));
    phpBooksAuthorsMap.put("Head First PHP & MySQL",
    Arrays.asList("Lynn Beighley", "Michael Morrison"));

    booksAuthorsMapsList.add(javaBooksAuthorsMap);
    booksAuthorsMapsList.add(phpBooksAuthorsMap);

    assertTrue(booksAuthorsMapsList.get(0).keySet()
      .containsAll(javaBooksAuthorsMap.keySet().stream().collect(Collectors.toList())));
    assertTrue(booksAuthorsMapsList.get(1).keySet()
      .containsAll(phpBooksAuthorsMap.keySet().stream().collect(Collectors.toList())));
}

Заключение

В этой статье поговорили о хранении HashMaps внутри List в Java. Затем написали простой пример, в котором добавили HashMap<String, ArrayList<String>> в List<String> для двух категорий книг.

Примеры доступны на GitHub.

Оригинал