Encodera

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.

Справочник Java

Map.computeIfPresent()

Меняет значение по ключу, только если ключ уже есть в словаре.

Доступно с: Java 8

Синтаксис

default V computeIfPresent(K key, BiFunction<? super K, ? super V, ? extends V> remappingFunction)

Параметры

ПараметрТипОписание
keyKКлюч.
remappingFunctionBiFunction<? super K, ? super V, ? extends V>Получает ключ и текущее значение и возвращает новое; null удаляет ключ.

Возвращаемое значение

VНовое значение или null, если ключа не было или он удалён.

Примеры

Отсутствующий ключ не добавляется:

void main() {
    Map<String, Integer> prices = new TreeMap<>(Map.of("tea", 3, "coffee", 4));
    prices.computeIfPresent("tea", (k, v) -> v + 1);
    prices.computeIfPresent("juice", (k, v) -> v + 1);
    IO.println(prices);
}

Результат:

{coffee=4, tea=4}

Уменьшение количества в корзине с удалением позиции, когда остался ноль:

void main() {
    Map<String, Integer> cart = new TreeMap<>(Map.of("pen", 1, "book", 2));
    cart.computeIfPresent("pen", (k, v) -> v > 1 ? v - 1 : null);
    cart.computeIfPresent("book", (k, v) -> v > 1 ? v - 1 : null);
    IO.println(cart);
}

Результат:

{book=1}

Примечания

Заменяет связку if (map.containsKey(key)) map.put(key, ...) одним вызовом. Для отсутствующего ключа функция не вызывается и метод возвращает null. Если ключа может не быть и его нужно создать, используйте compute() или merge().

См. также

  • Map.compute() — Вычисляет новое значение по ключу из старого (или из null, если ключа нет).
  • Map.computeIfAbsent() — Возвращает значение по ключу, создавая его функцией, если ключа нет.
  • Map.merge() — Добавляет значение по ключу или объединяет его с уже существующим.
  • Map.containsKey() — Проверяет, есть ли в словаре ключ.

В учебнике

  • Словари: Map и HashMap — Словари Map в Java: пары ключ — значение, put и get, getOrDefault, подсчёт с merge, TreeMap и LinkedHashMap.

Спасибо, что читаете!

Пожертвуйте сайту, мы стараемся ради вас.