Gymterview
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 для подсчёта частот — это классический пример, демонстрирующий мощь новых методов.