junior
Какие дополнительные методы для работы с ассоциативными массивами появились в Java 8?
Java 8 добавила в интерфейс Map набор default-методов, которые значительно упрощают типичные операции «проверь — вставь — обнови».
| Метод | Описание | Пример |
|---|---|---|
putIfAbsent(key, value) |
Добавляет значение только если ключ отсутствует | map.putIfAbsent("a", "Aa") |
getOrDefault(key, default) |
Возвращает значение или дефолт | map.getOrDefault("a", "not found") |
forEach(biConsumer) |
Итерация по парам ключ-значение | map.forEach((k, v) -> print(v)) |
compute(key, biFunction) |
Вычисляет новое значение (может создать или обновить) | map.compute("a", (k, v) -> k + v) |
computeIfPresent(key, biFunction) |
Обновляет значение, если ключ существует | map.computeIfPresent("a", (k, v) -> k + v) |
computeIfAbsent(key, function) |
Создаёт значение, если ключ отсутствует | map.computeIfAbsent("a", k -> "A" + k) |
merge(key, value, biFunction) |
Объединяет старое и новое значение или вставляет, если ключа нет | map.merge("a", "z", String::concat) |
replaceAll(biFunction) |
Заменяет все значения результатом функции | map.replaceAll((k, v) -> v.toUpperCase()) |
replace(key, value) |
Заменяет значение, если ключ существует | map.replace("a", "new") |
Типичные паттерны
Пример
// Подсчёт частот (до Java 8)
if (map.containsKey(word)) {
map.put(word, map.get(word) + 1);
} else {
map.put(word, 1);
}
// Подсчёт частот (Java 8)
map.merge(word, 1, Integer::sum);
На собеседовании: наиболее полезные для запоминания —
putIfAbsent,getOrDefault,computeIfAbsent,merge. Покажите паттернmergeдля подсчёта частот — это классический пример, демонстрирующий мощь новых методов.