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