Сливане на Java HashMap ()

Методът Java HashMap merge () вмъква посоченото съпоставяне на ключ / стойност в hashmap, ако посоченият ключ вече не присъства.

Ако посоченият ключ вече е свързан със стойност, методът заменя старата стойност с резултата от посочената функция.

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

 hashmap.merge(key, value, remappingFunction)

Тук hashmap е обект на HashMapкласа.

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

В merge()метода се 3 параметри:

  • ключ - ключ, с който трябва да бъде свързана посочената стойност
  • стойност - стойност, която трябва да бъде свързана с ключ, ако ключът вече е свързан с някаква стойност
  • 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: (Pant = 150, чанта = 300, обувки = 200) Цена на ризата: 100 Актуализирана HashMap: (Pant = 150, риза = 100, чанта = 300, обувки = 200)

В горния пример създадохме хеш-карта с имена цени. Забележете израза,

 prices.merge("Shirt", 100, (oldValue, newValue) -> oldValue + newValue)

Тук използвахме ламбда израза (oldValue, newValue) -> oldValue + newValue)като функция за пренасочване. За да научите повече за ламбда израза, посетете Java Lambda Expressions.

Тъй като ключът Shirt не присъства в цените, 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: (Панталони = 230, Риза = 150, Обувки = 320)

В горния пример създадохме две хеш-карти, наречени цени1 и цени2. Забележете кода,

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

Тук методът HashMap forEach () осъществява достъп до всяко въвеждане на hashmap prices2 и го обединява с hashmap prices1. Използвали сме два ламбда израза:

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

Тъй като ключът Shoes присъства и в двете хеш-карти, стойността на Shoes се заменя с резултата от функцията за пренасочване.

Java HashMap merge () Vs. putAll

Можем да използваме putAll()метода и за обединяване на две хеш-карти. Ако обаче ключът присъства и в двете хеш-карти, старата стойност се заменя с новата.

За разлика от merge(), putAll()методът не предоставя функция за пренасочване. Следователно не можем да решим каква стойност да съхраняваме за дублиращи се ключове.

За да научите повече за putAll()метода, посетете Java HashMap putAll ().

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