Sloučení Java HashMap ()

Metoda Java HashMap merge () vloží zadané mapování klíč / hodnota do hashmap, pokud zadaný klíč již není k dispozici.

Pokud je zadaný klíč již přidružen k hodnotě, metoda nahradí starou hodnotu výsledkem zadané funkce.

Syntaxe merge()metody je:

 hashmap.merge(key, value, remappingFunction)

Zde je hashmap objekt HashMaptřídy.

merge () parametry

merge()Metoda trvá 3 parametry:

  • klíč - klíč, se kterým má být zadaná hodnota spojena
  • hodnota - hodnota, která má být spojena s klíčem, pokud je klíč již přidružen k jakékoli hodnotě
  • remappingFunction - výsledek, který má být spojen s klíčem, pokud je klíč již spojen s hodnotou

merge () návratová hodnota

  • vrací novou hodnotu přidruženou ke klíči
  • vrátí, nullpokud s klíčem není spojena žádná hodnota

Poznámka : Pokud výsledky remappingFunction null, pak se odebere mapování pro zadaný klíč .

Příklad 1: HashMap merge () pro vložení nové položky

 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); ) )

Výstup

 HashMap: (kalhoty = 150, taška = 300, boty = 200) Cena košile: 100 Aktualizovaná HashMap: (kalhoty = 150, košile = 100, taška = 300, boty = 200)

Ve výše uvedeném příkladu jsme vytvořili hashmapu s názvem ceny. Všimněte si výrazu,

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

Zde jsme použili funkci lambda (oldValue, newValue) -> oldValue + newValue)jako funkci přemapování. Další informace o výrazu lambda najdete na Java Lambda Expressions.

Protože klíčová košile není v ceně, merge()metoda vloží mapování Shirt=100. Výsledek funkce přemapování je ignorován.

Příklad 2: HashMap merge () pro vložení položky s duplicitním klíčem

 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); ) )

Výstup

 HashMap: (Madrid = Španělsko, Canberra = Austrálie, Washington = Amerika) Washington: Amerika / USA Aktualizovaná HashMap: (Madrid = Španělsko, Canberra = Austrálie, Washington = Amerika / USA), 

Ve výše uvedeném příkladu jsme vytvořili hashmapu s názvem země. Všimněte si výrazu,

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

Zde jsme použili funkci lambda (oldValue, newValue) -> oldValue + "/" + newValue)jako funkci přemapování.

Protože klíčový Washington je již v zemích k dispozici, stará hodnota je nahrazena hodnotou vrácenou funkcí přemapování. Mapování Washingtonu tedy zahrnuje hodnotu Amerika / USA.

Příklad 3: HashMap merge () ke sloučení dvou 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); ) )

Výstup

 HashMap 1: (Kalhoty = 230, Boty = 350) HashMap 2: (Košile = 150, Boty = 320) Sloučená HashMap: (Kalhoty = 230, Košile = 150, Boty = 320)

Ve výše uvedeném příkladu jsme vytvořili dva hashmapy pojmenované ceny1 a ceny2. Všimněte si kódu,

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

Zde metoda HashMap forEach () přistupuje ke každé položce cen hashmap2 a slučuje ji s cenami hashmap1. Použili jsme dva výrazy lambda:

  • (klíč, hodnota) -> prices.merge (…) - přistupuje ke každé položce cen1 a předává ji merge()metodě.
  • (oldValue, newValue) -> (…) - Jedná se o funkci přemapování. Porovná dvě hodnoty a vrátí menší hodnotu.

Protože klíčové boty jsou přítomny v obou hashmapách, hodnota boty je nahrazena výsledkem funkce přemapování.

Sloučení Java HashMap () vs. putAll

putAll()Metodu můžeme také použít ke sloučení dvou hashmap. Pokud je však klíč přítomen v obou hashmapách, stará hodnota je nahrazena novou hodnotou.

Na rozdíl od merge()se putAll()metoda neposkytuje funkci přemapování. Proto nemůžeme rozhodnout, jakou hodnotu uložit pro duplicitní klíče.

Další informace o této putAll()metodě najdete na Java HashMap putAll ().

Zajímavé články...