Java HashMap -yhdistelmä ()

Java HashMap merge () -menetelmä lisää määritetyn avaimen / arvon yhdistämisen hashmapiin, jos määritettyä avainta ei jo ole.

Jos määritetty avain on jo liitetty arvoon, menetelmä korvaa vanhan arvon määritetyn funktion tuloksella.

Menetelmän syntaksi merge()on:

 hashmap.merge(key, value, remappingFunction)

Tässä hashmap on HashMapluokan kohde.

yhdistää () parametrit

merge()Menetelmä kestää 3 parametrit:

  • avain - avain, johon määritetty arvo liitetään
  • arvo - avaimelle liitettävä arvo, jos avain on jo liitetty mihin tahansa arvoon
  • remappingFunction - tulos liitetään avaimeen, jos avain on jo liitetty arvoon

yhdistää () palautusarvo

  • palauttaa avaimeen liittyvän uuden arvon
  • palauttaa, nulljos avaimeen ei liity arvoa

Huomaa : Jos remappingFunction johtaa null, määritetyn avaimen kartoitus poistetaan.

Esimerkki 1: HashMap-yhdistäminen () uuden merkinnän lisäämiseksi

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

Tuotos

 HashMap: (housut = 150, laukku = 300, kengät = 200) paidan hinta: 100 päivitetty HashMap: (housut = 150, paita = 100, laukku = 300, kengät = 200)

Yllä olevassa esimerkissä olemme luoneet hashmap-nimisen hinnan. Huomaa ilmaisu,

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

Tässä olemme käyttäneet lambda-lauseketta (oldValue, newValue) -> oldValue + newValue)uudelleenmuodostustoimintona. Lisätietoja lambda-lausekkeista on Java Lambda -lausekkeissa.

Koska avainpaitaa ei ole hinnoissa, merge()menetelmä lisää kartoituksen Shirt=100. Ja uudelleenmäärittelytoiminnon tulos jätetään huomioimatta.

Esimerkki 2: HashMap-yhdistäminen () merkinnän lisäämiseen kaksoiskoodiavaimella

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

Tuotos

 HashMap: (Madrid = Espanja, Canberra = Australia, Washington = Amerikka) Washington: Amerikka / USA Päivitetty HashMap: (Madrid = Espanja, Canberra = Australia, Washington = Amerikka / USA), 

Yllä olevassa esimerkissä olemme luoneet hashmap-nimetyt maat. Huomaa ilmaisu,

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

Tässä olemme käyttäneet lambda-lauseketta (oldValue, newValue) -> oldValue + "/" + newValue)uudelleenmuodostustoimintona.

Koska avain Washington on jo maissa, vanha arvo korvataan uudelleensuunnittelutoiminnon palauttamalla arvolla. Washingtonin kartoitus sisältää siis arvoa Amerikka / USA.

Esimerkki 3: HashMap merge () yhdistää kaksi HashMapia

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

Tuotos

 HashMap 1: (Housut = 230, Kengät = 350) HashMap 2: (Paita = 150, Kengät = 320) Yhdistetyt HashMap: (Housut = 230, Paita = 150, Kengät = 320)

Yllä olevassa esimerkissä olemme luoneet kaksi hashappia nimeltä hinnat1 ja hinnat2. Huomaa koodi,

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

Tässä HashMap forEach () -menetelmä käyttää kutakin hashmap-hintojen2 merkintää ja yhdistää sen hashmap-hintoihin1. Olemme käyttäneet kahta lambda-lauseketta:

  • (avain, arvo) -> prices.merge (…) - Se käyttää jokaista hintojen syöttöä1 ja siirtää sen merge()menetelmään.
  • (oldValue, newValue) -> (…) - Se on uudelleenmuodostustoiminto. Se vertaa kahta arvoa ja palauttaa pienemmän arvon.

Koska avain Kengät on läsnä molemmissa hashmapissa, kengän arvo korvataan uudelleensuunnittelutoiminnon tuloksella.

Java HashMap -yhdistelmä () vs. laita kaikki

Voimme myös käyttää putAll()menetelmää kahden hashapin yhdistämiseen. Jos avain on kuitenkin molemmissa hashmapsissa, vanha arvo korvataan uudella.

Toisin kuin merge(), putAll()menetelmä ei tarjoa uudelleenkäynnistystoimintoa. Siksi emme voi päättää, mikä arvo tallennetaan kaksoisavaimille.

Lisätietoja putAll()menetelmästä on Java HashMap putAll () -sivulla.

Mielenkiintoisia artikkeleita...