Злиття Java HashMap ()

Метод злиття () Java HashMap вставляє вказане відображення ключа / значення у хеш-карту, якщо вказаний ключ уже відсутній.

Якщо вказаний ключ вже пов'язаний зі значенням, метод замінює старе значення результатом зазначеної функції.

Синтаксис merge()методу:

 hashmap.merge(key, value, remappingFunction)

Тут hashmap є об'єктом HashMapкласу.

merge () Параметри

merge()Метод приймає 3 параметра:

  • ключ - ключ, з яким має бути пов'язане вказане значення
  • 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)

У наведеному вище прикладі ми створили хеш-карту з цінами. Зверніть увагу на вираз,

 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: (Мадрид = Іспанія, Канберра = Австралія, Вашингтон = Америка / США), 

У наведеному вище прикладі ми створили хеш-карту з назвою країни. Зверніть увагу на вираз,

 countries.merge("Washington", "USA", (oldValue, newValue) -> oldValue + "/" + newValue)

Тут ми використовували лямбда-вираз (oldValue, newValue) -> oldValue + "/" + newValue)як функцію перепризначення.

Оскільки ключ Вашингтон вже присутній у країнах, старе значення замінюється значенням, яке повертається функцією перепризначення. Отже, відображення для Вашингтона включає значення Америка / США.

Приклад 3: HashMap merge () для об’єднання двох HashMaps

 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: (Штани = 230, Взуття = 350) HashMap 2: (Сорочка = 150, Взуття = 320) Об’єднана HashMap: (Pant = 230, Сорочка = 150, Взуття = 320)

У наведеному вище прикладі ми створили дві хеш-карти з іменами prices1 та prices2. Зверніть увагу на код,

  prices2.forEach((key, value) -> prices1.merge(key, value, (oldValue, newValue) -> ( if (oldValue < newValue) ( return oldValue; ) else ( return newValue; ) )));

Тут метод HashMap forEach () отримує доступ до кожного входу цін хеш-карти2 та об'єднує його з цінами хеш-карти1. Ми використали два лямбда-вирази:

  • (ключ, значення) -> prices.merge (…) - Він отримує доступ до кожного введення цін1 і передає його merge()методу.
  • (oldValue, newValue) -> (…) - Це функція перепризначення. Він порівнює два значення і повертає менше значення.

Оскільки ключ Shoes присутній в обох хеш-картах, значення Shoes замінюється результатом функції перепризначення.

Java HashMap merge () Vs. putAll

Ми також можемо використовувати putAll()метод для об'єднання двох хеш-карт. Однак, якщо ключ присутній в обох хеш-картах, старе значення замінюється новим.

На відміну від merge(), putAll()метод не забезпечує функцію перепризначення. Отже, ми не можемо вирішити, яке значення зберігати для дублікатів ключів.

Щоб дізнатись більше про putAll()метод, відвідайте Java HashMap putAll ().

Цікаві статті...