В этом руководстве обсудим, как хранить 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.