English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
If the specified key does not exist, the Java HashMap merge() method will insert the specified key/value mapping into the hash map.
However, if the specified key is already associated with a value, this method will replace the old value with the result of the specified function.
The syntax of the merge() method is:
hashmap.merge(key, value, remappingFunction)
The merge() method takes 3 parameters:
key - To specify the value associated with the key
value - If the key is already associated with any value, then the value associated with the key
remappingFunction - If the key is already associated with a value, the result is associated with the key.
Возвращает новый значение, связанное с ключом (key)
Если нет значения, связанного с ключом (key), то возвращается null
Обратите вниманиеЕсли результат remappingFunction равен null, то удаляется карта с указанным ключом.
import java.util.HashMap; class Main {}} public static void main(String[] args) { // Создание HashMap HashMap<String, Integer> prices = new HashMap<>(); // Вставка элемента в HashMap prices.put("Shoes", 200); prices.put("Bag", 300); prices.put("Pant", 150); System.out.println("HashMap: " + prices); int returnedValue = prices.merge("Shirt", 100, (oldValue, newValue) -> oldValue + newValue); System.out.println("Цена рубашки: " + returnedValue); // Вывод обновленного HashMap System.out.println("Обновленный HashMap: " + prices); } }
Результат вывода
HashMap: {Pant=150, Bag=300, Shoes=200} Цена рубашки: 100 Обновленный HashMap: {Pant=150, Shirt=100, Bag=300, Shoes=200}
В предыдущем примере мы создали карту с именем prices. Обратите внимание на выражение
prices.merge("Shirt", 100, (oldValue, newValue) -> oldValue + newValue)
Здесь мы используем лямбда-выражение (oldValue, newValue) -> oldValue + newValue) в качестве функции remappingFunction. Для получения дополнительной информации о лямбда-выражениях посетитеJava Lambda выражения.
Поскольку ключ Shirt в prices отсутствует, метод merge() вставит Shirt=100 в карту и результат remappingFunction будет проигнорирован.
import java.util.HashMap; class Main {}} public static void main(String[] args) { // Создание HashMap HashMap<String, String> countries = new HashMap<>(); // Вставка записи в HashMap countries.put("Washington", "America"); countries.put("Canberra", "Australia"); countries.put("Madrid", "Spain"); System.out.println("HashMap: " + countries); // Объединение карты ключа Washington String returnedValue = countries.merge("Washington", "USA", (oldValue, newValue) -> oldValue + "/" + newValue); System.out.println("Washington: " + returnedValue); // Печать обновленного HashMap System.out.println("Обновленный HashMap: " + countries); } }
Результат вывода
HashMap: {Madrid=Spain, Canberra=Australia, Washington=America} Washington: America/USA Обновленный HashMap: {Madrid=Spain, Canberra=Australia, Washington=America/USA},
В上面的 примере мы создали хеш-мапу под названием countries. Обратите внимание на выражение
countries.merge("Washington", "USA", (oldValue, newValue) -> oldValue + "/" + newValue)
Здесь мы используем лямбда-выражение (oldValue, newValue) -> oldValue + "/" + newValue) в качестве remappingFunction.
Поскольку ключ Washington уже существует в countries, старое значение будет заменено значением, возвращаемым remappingFunction. Таким образом, карта Washington включает значение America/USA.
import java.util.HashMap; class Main {}} public static void main(String[] args) { // Создание HashMap HashMap<String, Integer> prices1 = new HashMap<>(); // Вставка элемента в HashMap prices1.put("Pant", 230); prices1.put("Shoes", 350); System.out.println("HashMap 1: " + prices1); // Создание другого hashmap HashMap<String, Integer> prices2 = new HashMap<>(); // Вставка элемента в HashMap prices2.put("Shirt", 150); prices2.put("Shoes", 320); System.out.println("HashMap 2: " + prices2); // forEach() посещает каждый элемент в prices2 // merge() вставляет каждый элемент из prices2 в prices1 prices2.forEach((key, value) -> prices1.merge(key, value, (oldValue, newValue) -> { // Возвращает меньшее значение if (oldValue < newValue) { return oldValue; } else { return newValue; } }); System.out.println("Объединенный HashMap: " + prices1); } }
Результат вывода
HashMap 1: {Pant=230, Shoes=350} HashMap 2: {Shirt=150, Shoes=320} Объединенный HashMap: {Pant=230, Shirt=150, Shoes=320}
В примере выше мы создали два хэш-мапа с именами prices1 и prices2. Обратите внимание на код:
prices2.forEach((key, value) -> prices1.merge(key, value, (oldValue, newValue) -> { if (oldValue < newValue) { return oldValue; } else { return newValue; } });
Здесь,HashMap forEach()Метод посещает каждый элемент хэш-таблицы prices2 и объединяет его с хэш-таблицей prices1. Мы используем два лямбда-выражения:
(key, value) -> prices.merge(...) - Она посещает каждый элемент prices1 и передает его методу merge().
(oldValue, newValue) -> {...} - Это функция ремаппинга (remappingFunction). Она сравнивает два значения и возвращает более малое.
Поскольку ключ Shoes существует в обоих хэш-картах, значение Shoes будет заменено результатом функции ремаппинга (remappingFunction).
Мы также можем использовать метод putAll() для объединения двух хэш-карт, но если в обоих хэш-картах есть ключи, старые значения будут заменены новыми
В отличие от merge(), метод putAll() не предоставляет функцию ремаппинга. Таким образом, мы не можем определить значения, которые нужно хранить для повторяющихся ключей.
Чтобы узнать больше о методе putAll(), пожалуйста, посетитеJava HashMap putAll().