Zlúčenie Java HashMap ()

Metóda zlúčenia () Java HashMap vloží zadané mapovanie kľúča / hodnoty do hashmapy, ak zadaný kľúč už nie je prítomný.

Ak je zadaný kľúč už priradený k hodnote, metóda nahradí starú hodnotu výsledkom zadanej funkcie.

Syntax merge()metódy je:

 hashmap.merge(key, value, remappingFunction)

Tu je hashmap objektom HashMaptriedy.

merge () parametre

merge()Metóda trvá 3 parametre:

  • kľúč - kľúč, s ktorým má byť spojená zadaná hodnota
  • hodnota - hodnota, ktorá sa má priradiť ku kľúču, ak je kľúč už priradený k akejkoľvek hodnote
  • remappingFunction - výsledok, ktorý sa má spojiť s kľúčom, ak je kľúč už spojený s hodnotou

merge () návratová hodnota

  • vráti novú hodnotu spojenú s kľúčom
  • vráti, nullak s kľúčom nie je spojená žiadna hodnota

Poznámka : Ak bude výsledkom remappingFunction null, mapovanie pre zadaný kľúč sa odstráni.

Príklad 1: HashMap merge () na vloženie nového záznamu

 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ýkon

 HashMap: (nohavice = 150, taška = 300, topánky = 200) Cena košele: 100 Aktualizovaná HashMap: (nohavice = 150, košeľa = 100, taška = 300, topánky = 200)

Vo vyššie uvedenom príklade sme vytvorili hashmapu s názvom ceny. Všimnite si výraz,

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

Tu sme použili funkciu lambda (oldValue, newValue) -> oldValue + newValue)ako funkciu premapovania. Ak sa chcete dozvedieť viac informácií o výraze lambda, navštívte výraz Java Lambda Expressions.

Pretože kľúčová košeľa nie je uvedená v cenách, merge()metóda vloží mapovanie Shirt=100. A výsledok funkcie premapovania je ignorovaný.

Príklad 2: HashMap merge () na vloženie záznamu s duplicitným kľúčom

 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ýkon

 HashMap: (Madrid = Španielsko, Canberra = Austrália, Washington = Amerika) Washington: Amerika / USA Aktualizovaná HashMap: (Madrid = Španielsko, Canberra = Austrália, Washington = Amerika / USA), 

Vo vyššie uvedenom príklade sme vytvorili hashmapu s názvom krajiny. Všimnite si výraz,

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

Tu sme použili funkciu lambda (oldValue, newValue) -> oldValue + "/" + newValue)ako funkciu premapovania.

Pretože kľúčový Washington je už v krajinách k dispozícii, stará hodnota sa nahradí hodnotou vrátenou funkciou premapovania. Mapovanie pre Washington preto zahŕňa hodnotu Amerika / USA.

Príklad 3: HashMap merge () na zlúčenie dvoch 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ýkon

 HashMap 1: (nohavice = 230, topánky = 350) HashMap 2: (tričko = 150, topánky = 320) Zlúčená mapa HashMap: (nohavice = 230, košeľa = 150, topánky = 320)

Vo vyššie uvedenom príklade sme vytvorili dva hashmapy pomenované ceny1 a ceny2. Všimnite si kód,

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

Metóda HashMap forEach () tu pristupuje ku každej položke cien hashmap2 a spája ju s cenami hashmap1. Použili sme dva výrazy lambda:

  • (kľúč, hodnota) -> prices.merge (…) - pristupuje ku každému záznamu cien1 a odovzdáva ho merge()metóde.
  • (oldValue, newValue) -> (…) - je to funkcia premapovania. Porovná dve hodnoty a vráti menšiu hodnotu.

Pretože kľúč Obuv je prítomný v obidvoch hashmapách, hodnota Obuv je nahradená výsledkom funkcie premapovania.

Zlúčenie Java HashMap () vs. putAll

putAll()Metódu môžeme tiež použiť na zlúčenie dvoch hashmap. Ak je však kľúč prítomný v oboch hashmapách, stará hodnota sa nahradí novou hodnotou.

Na rozdiel od merge()tejto putAll()metódy metóda neposkytuje funkciu premapovania. Preto nemôžeme rozhodnúť, akú hodnotu máme uložiť pre duplicitné kľúče.

Ak sa chcete o tejto putAll()metóde dozvedieť viac , navštívte Java HashMap putAll ().

Zaujímavé články...