Метод 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,
который возвращает значение по ключу