Слияние Java HashMap ()

Метод 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 ().

Интересные статьи...