Метод merge
Метод merge добавляет новое значение в
HashMap по указанному ключу, если ключ ещё
не существует. Если же ключ уже есть в map,
метод применяет функцию-ремаппинг к старому
и новому значению и записывает результат.
В первый параметр мы передаем ключ, во второй -
значение, которое нужно добавить, в третий -
функцию, которая объединяет старое и новое
значение.
Если функция-ремаппинг вернёт null,
запись по этому ключу удаляется из map.
Если ключа не было, значение записывается
без вызова функции. Метод возвращает итоговое
значение, записанное в map по ключу.
Синтаксис
map.merge(key, value, remappingFunction)
Пример
Давайте добавим новую запись в map, указав
функцию объединения. Поскольку ключа 1
ещё нет, значение добавится без вызова функции:
import java.util.HashMap;
public class Main
{
public static void main(String[] args)
{
HashMap<Integer, String> map = new HashMap<>();
String res = map.merge(1, "abcde", (oldVal, newVal) -> oldVal + newVal);
System.out.println(res);
System.out.println(map);
}
}
Результат выполнения кода:
"abcde"
{1=abcde}
Пример
А теперь давайте объединим новое значение
с уже существующим. В этом случае функция
получит старое значение "abcde" и новое
"12345":
import java.util.HashMap;
public class Main
{
public static void main(String[] args)
{
HashMap<Integer, String> map = new HashMap<>();
map.put(1, "abcde");
String res = map.merge(1, "12345", (oldVal, newVal) -> oldVal + newVal);
System.out.println(res);
System.out.println(map);
}
}
Результат выполнения кода:
"abcde12345"
{1=abcde12345}
Пример
Давайте посчитаем, сколько раз каждое слово
встречается в списке, используя метод merge
для накопления счётчика:
import java.util.HashMap;
import java.util.List;
public class Main
{
public static void main(String[] args)
{
List<String> words = List.of("a", "b", "a", "c", "b", "a");
HashMap<String, Integer> map = new HashMap<>();
for (String word : words) {
map.merge(word, 1, (oldVal, newVal) -> oldVal + newVal);
}
System.out.println(map);
}
}
Результат выполнения кода:
{a=3, b=2, c=1}
Пример
Если функция-ремаппинг вернёт null,
запись по ключу удаляется из map:
import java.util.HashMap;
public class Main
{
public static void main(String[] args)
{
HashMap<Integer, String> map = new HashMap<>();
map.put(1, "abcde");
String res = map.merge(1, "12345", (oldVal, newVal) -> null);
System.out.println(res);
System.out.println(map);
}
}
Результат выполнения кода:
null
{}
Смотрите также
-
класс
HashMap,
который хранит пары ключ-значение -
метод
put,
который добавляет запись в map -
метод
putIfAbsent,
который добавляет значение, если ключа нет -
метод
compute,
который вычисляет значение по ключу