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

Метод 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,
    который вычисляет значение по ключу
Мы используем cookie для работы сайта, аналитики и персонализации. Обработка данных происходит согласно Политике конфиденциальности.
принять все настроить отклонить