Метод Java HashMap merge () вставляет указанное сопоставление ключа / значения в хэш-карту, если указанный ключ уже отсутствует.
Если указанный ключ уже связан со значением, метод заменяет старое значение результатом указанной функции.
Синтаксис merge()
метода:
hashmap.merge(key, value, remappingFunction)
Здесь hashmap - это объект HashMap
класса.
Параметры merge ()
merge()
Метод принимает 3 параметра:
- key - ключ, с которым должно быть связано указанное значение
- value - значение, которое будет связано с ключом, если ключ уже связан с каким-либо значением
- remappingFunction - результат, который будет связан с ключом, если ключ уже связан со значением
merge () Возвращаемое значение
- возвращает новое значение, связанное с ключом
- возвращается,
null
если с ключом не связано значение
Примечание . Если результат remappingFunction null
, то отображение для указанного ключа удаляется.
Пример 1: HashMap merge () для вставки новой записи
import java.util.HashMap; class Main ( public static void main(String() args) ( // create an HashMap HashMap prices = new HashMap(); // insert entries to the 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("Price of Shirt: " + returnedValue); // print updated HashMap System.out.println("Updated HashMap: " + prices); ) )
Вывод
HashMap: (брюки = 150, сумка = 300, обувь = 200) Цена рубашки: 100 Обновленная HashMap: (брюки = 150, рубашка = 100, сумка = 300, обувь = 200)
В приведенном выше примере мы создали хэш-карту с именем price. Обратите внимание на выражение,
prices.merge("Shirt", 100, (oldValue, newValue) -> oldValue + newValue)
Здесь мы использовали лямбда-выражение (oldValue, newValue) -> oldValue + newValue)
в качестве функции переназначения. Чтобы узнать больше о лямбда-выражениях, посетите Java Lambda Expressions.
Поскольку ключ Рубашка отсутствует в ценах, merge()
метод вставляет отображение Shirt=100
. И результат функции переназначения игнорируется.
Пример 2: HashMap merge () для вставки записи с повторяющимся ключом
import java.util.HashMap; class Main ( public static void main(String() args) ( // create an HashMap HashMap countries = new HashMap(); // insert entries to the HashMap countries.put("Washington", "America"); countries.put("Canberra", "Australia"); countries.put("Madrid", "Spain"); System.out.println("HashMap: " + countries); // merge mapping for key Washington String returnedValue = countries.merge("Washington", "USA", (oldValue, newValue) -> oldValue + "/" + newValue); System.out.println("Washington: " + returnedValue); // print updated HashMap System.out.println("Updated HashMap: " + countries); ) )
Вывод
HashMap: (Мадрид = Испания, Канберра = Австралия, Вашингтон = Америка) Вашингтон: Америка / США Обновленная HashMap: (Мадрид = Испания, Канберра = Австралия, Вашингтон = Америка / США),
В приведенном выше примере мы создали хэш-карту с именем country. Обратите внимание на выражение,
countries.merge("Washington", "USA", (oldValue, newValue) -> oldValue + "/" + newValue)
Здесь мы использовали лямбда-выражение (oldValue, newValue) -> oldValue + "/" + newValue)
в качестве функции переназначения.
Поскольку ключ Вашингтон уже присутствует в странах, старое значение заменяется значением, возвращаемым функцией переназначения. Следовательно, отображение Вашингтона включает значение Америка / США.
Пример 3: HashMap merge () для объединения двух HashMap
import java.util.HashMap; class Main ( public static void main(String() args) ( // create an HashMap HashMap prices1 = new HashMap(); // insert entries to the HashMap prices1.put("Pant", 230); prices1.put("Shoes", 350); System.out.println("HashMap 1: " + prices1); // create another hashmap HashMap prices2 = new HashMap(); //insert entries to the HashMap prices2.put("Shirt", 150); prices2.put("Shoes", 320); System.out.println("HashMap 2: " + prices2); // forEach() access each entries of prices2 // merge() inserts each entry from prices2 to prices1 prices2.forEach((key, value) -> prices1.merge(key, value, (oldValue, newValue) -> ( // return the smaller value if (oldValue < newValue) ( return oldValue; ) else ( return newValue; ) ))); System.out.println("Merged HashMap: " + prices1); ) )
Вывод
HashMap 1: (Pant = 230, Shoes = 350) HashMap 2: (Shirt = 150, Shoes = 320) Объединенная HashMap: (Pant = 230, Shirt = 150, Shoes = 320)
В приведенном выше примере мы создали две хэш-карты с именами price1 и price2. Обратите внимание на код,
prices2.forEach((key, value) -> prices1.merge(key, value, (oldValue, newValue) -> ( if (oldValue < newValue) ( return oldValue; ) else ( return newValue; ) )));
Здесь метод HashMap forEach () обращается к каждой записи хэш-карты price2 и объединяет ее с хэш-картой price1. Мы использовали два лямбда-выражения:
- (ключ, значение) -> price.merge (…) - получает доступ к каждой записи price1 и передает ее
merge()
методу. - (oldValue, newValue) -> (…) - это функция переназначения. Он сравнивает два значения и возвращает меньшее значение.
Поскольку ключ Shoes присутствует в обоих хэш-картах, значение Shoes заменяется результатом функции переназначения.
Java HashMap merge () против. положить все
Мы также можем использовать этот putAll()
метод для объединения двух хэш-карт. Однако, если ключ присутствует в обеих хэш-картах, старое значение заменяется новым значением.
В отличие от метода merge()
, в этом putAll()
методе нет функции переназначения. Следовательно, мы не можем решить, какое значение хранить для повторяющихся ключей.
Чтобы узнать больше о putAll()
методе, посетите Java HashMap putAll ().