РЕПЕТИТОР математика физика информатика
Для школьников и студентов. Подтягивание пробелов. ЦЭ, ЦТ, ОГЭ, ЕГЭ.
Идет набор на ЛЕТО. Жмите для подробностей:)
385 of 1163 menu

Метод computeIfAbsent

Метод computeIfAbsent класса HashMap проверяет, есть ли в map значение для указанного ключа. Если значения нет, метод вычисляет новое значение с помощью переданной функции и добавляет его в map. В первый параметр мы передаем ключ, для которого нужно проверить наличие значения, во второй - функцию, которая принимает этот ключ и возвращает новое значение для добавления. Если же значение для ключа уже есть, метод ничего не меняет и просто возвращает текущее значение.

Синтаксис

map.computeIfAbsent(key, key -> value)

Пример

Давайте создадим map и добавим в неё значение по ключу "a", которого ещё нет в map:

import java.util.HashMap; public class Main { public static void main(String[] args) { HashMap<String, Integer> map = new HashMap<>(); map.put("b", 2); Integer res = map.computeIfAbsent("a", key -> 1); System.out.println(res); System.out.println(map); } }

Результат выполнения кода:

1 {a=1, b=2}

Пример

А теперь давайте попробуем вызвать метод для ключа, который уже есть в map:

import java.util.HashMap; public class Main { public static void main(String[] args) { HashMap<String, Integer> map = new HashMap<>(); map.put("a", 1); map.put("b", 2); Integer res = map.computeIfAbsent("a", key -> 999); System.out.println(res); System.out.println(map); } }

Результат выполнения кода:

1 {a=1, b=2}

Как видите, значение для ключа "a" не изменилось на 999, потому что оно уже было в map.

Пример

Давайте используем метод computeIfAbsent для подсчета количества символов в строке:

import java.util.HashMap; public class Main { public static void main(String[] args) { String str = "abcde"; HashMap<Character, Integer> map = new HashMap<>(); for (char ch : str.toCharArray()) { map.computeIfAbsent(ch, key -> 0); map.put(ch, map.get(ch) + 1); } System.out.println(map); } }

Результат выполнения кода:

{a=1, b=1, c=1, d=1, e=1}

Пример

Давайте создадим map, где значением является список, и будем добавлять элементы в список по ключу:

import java.util.HashMap; import java.util.ArrayList; import java.util.List; public class Main { public static void main(String[] args) { HashMap<String, List<Integer>> map = new HashMap<>(); map.computeIfAbsent("a", key -> new ArrayList<>()).add(1); map.computeIfAbsent("a", key -> new ArrayList<>()).add(2); map.computeIfAbsent("b", key -> new ArrayList<>()).add(3); System.out.println(map); } }

Результат выполнения кода:

{a=[1, 2], b=[3]}

Смотрите также

  • класс HashMap,
    который хранит пары ключ-значение
  • метод put,
    который добавляет значение по ключу
  • метод putIfAbsent,
    который добавляет значение, если ключа ещё нет
  • метод get,
    который возвращает значение по ключу
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить