Java: как получить ключи и значения с map

Вступление

Хранилища ключевых значений обязательны и часто используются, особенно в операциях, требующих быстрого и частого поиска. Они позволяют сопоставлять объект – ключ – с другим объектом, значением. Таким образом, значения можно легко получить, просмотрев ключ.

В Java наиболее популярной реализацией map считается класс HashMap. Помимо сопоставления ключ-значение, он используется в коде, который требует частых вставок, обновлений и поиска. Время вставки и поиска является постоянной величиной O(1).

В этом уроке мы рассмотрим, как получить ключи и значения map в Java.

Получаем ключи и значения (записей) с map Java

Большую часть времени вы храните пары ключ-значение, потому что обе части информации важны. Таким образом, в большинстве случаев вы захотите собрать пару ключ-значение вместе.

Метод entrySet() возвращает набор объектов Map.Entry, которые находятся на карте. Вы можете легко перебирать этот набор, чтобы получить ключи и связанные с ними значения с map.

Заполним хэш-карту некоторыми значениями:

Map<String, Integer> map =  new HashMap<>();
		
map.put("David", 24);
map.put("John", 35);
map.put("Jane", 19);
map.put("Billy", 21);

Теперь повторим эту карту, пройдясь по каждой записи Map.Entry<K,V> в наборе записей и извлекая ключ и значение из каждой из этих записей:

for (Map.Entry<String, Integer> pair : map.entrySet()) {
    System.out.println(String.format("Key (name) is: %s, Value (age) is : %s", pair.getKey(), pair.getValue()));   
}

Результат:

Key (name) is: Billy, Value (age) is: 21
Key (name) is: David, Value (age) is: 24
Key (name) is: John, Value (age) is: 35
Key (name) is: Jane, Value (age) is: 19

Получаем ключи и значения (записи) из Java-map с помощью forEach()

Java 8 знакомит нас с методом forEach() для коллекций. Он принимает BiConsumer<? super K, ? super V> action. Метод forEach() выполняет заданное действие для каждой записи хэш-map.

Используем ту же карту, что и раньше, но на этот раз добавим год к возрасту каждой записи:

map.forEach((key, value) -> System.out.println(key + " : " + value));

Результат:

Billy : 21
David : 24
John : 35
Jane : 19

Или, вместо того, чтобы использовать каждый ключ и значение с map, вы можете использовать целые записи из набора:

map.entrySet()
    .forEach((entry) -> System.out.println(entry.getKey() + " : " + entry.getValue()));

Результат тот же:

Billy : 21
David : 24
John : 35
Jane : 19

Получаем ключи с map Java

Чтобы получить только ключи, если вам не нужна информация из значений, вместо набора записей вы можете получить набор ключей:

for(String key: map.keySet()){
    System.out.println(key);
}

Вывод:

Billy
David
John
Jane

Получаем значения с map Java

Также вы можете получить только лишь значения. Для этого используем values():

for(String value: map.values()){
    System.out.println(value);
}

Вывод:

21
54
35
19

Проверяем, содержит ли карта ключ

Класс HashMap содержит метод containsKey(), который проверяет, существует ли переданный ключ в HashMap, и возвращает логическое значение, означающее наличие элемента или его отсутствие.

Проверим, существует ли ключ 5:

boolean result = map.containsKey(5);
System.out.println(result);

Вывод:

false

И если ключ существует:

boolean result = map.containsKey("John");
System.out.println(result);

Вывод:

true

Заключение

В этой статье мы рассмотрели несколько способов получения ключей и значений (записей) map в Java. Мы рассмотрели использование итератора и просмотр каждой записи Map.Entry, а также использование метода forEach() как на самой карте, так и на ее наборе записей.

Наконец, мы рассмотрели, как получить набор ключей и значения отдельно, и проверить, содержит ли карта данный ключ.

Ответить