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 HashMap
tří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í,
null
pokud 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 ().