Scalanie Java HashMap ()

Metoda merge () języka Java HashMap wstawia określone mapowanie klucz / wartość do obiektu hashmap, jeśli określony klucz już nie istnieje.

Jeśli określony klucz jest już skojarzony z wartością, metoda zastępuje starą wartość wynikiem określonej funkcji.

Składnia merge()metody to:

 hashmap.merge(key, value, remappingFunction)

Tutaj hashmap jest obiektem tej HashMapklasy.

merge () Parametry

merge()Sposób wykonuje 3 parametry:

  • klucz - klucz, z którym ma być skojarzona określona wartość
  • wartość - wartość, która ma być skojarzona z kluczem, jeśli klucz jest już powiązany z jakąkolwiek wartością
  • remappingFunction - wynik do skojarzenia z kluczem, jeśli klucz jest już powiązany z wartością

merge () Zwracana wartość

  • zwraca nową wartość skojarzoną z kluczem
  • zwraca, nulljeśli żadna wartość nie jest skojarzona z kluczem

Uwaga : Jeśli wyniki funkcji remappingFunction null, to mapowanie dla określonego klucza jest usuwane.

Przykład 1: HashMap merge (), aby wstawić nowy wpis

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

Wynik

 HashMap: (Spodnie = 150, Torba = 300, Buty = 200) Cena koszuli: 100 Zaktualizowana mapa HashMap: (Spodnie = 150, Koszula = 100, Torba = 300, Buty = 200)

W powyższym przykładzie utworzyliśmy hashmap o nazwie price. Zwróć uwagę na wyrażenie,

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

Tutaj użyliśmy wyrażenia lambda (oldValue, newValue) -> oldValue + newValue)jako funkcji odwzorowania. Aby dowiedzieć się więcej o wyrażeniach lambda, odwiedź stronę Wyrażenia Lambda w języku Java.

Ponieważ kluczowa Koszula nie występuje w cenach, merge()metoda wstawia mapowanie Shirt=100. Wynik funkcji ponownego odwzorowania jest ignorowany.

Przykład 2: HashMap merge (), aby wstawić wpis z duplikatem klucza

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

Wynik

 HashMap: (Madryt = Hiszpania, Canberra = Australia, Waszyngton = Ameryka) Waszyngton: Ameryka / USA Zaktualizowany HashMap: (Madryt = Hiszpania, Canberra = Australia, Waszyngton = Ameryka / USA), 

W powyższym przykładzie utworzyliśmy hashmap o nazwie kraje. Zwróć uwagę na wyrażenie,

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

Tutaj użyliśmy wyrażenia lambda (oldValue, newValue) -> oldValue + "/" + newValue)jako funkcji odwzorowania.

Ponieważ klucz Washington jest już obecny w krajach, stara wartość jest zastępowana wartością zwracaną przez funkcję ponownego mapowania. W związku z tym mapowanie dla Waszyngtonu obejmuje wartości Ameryka / USA.

Przykład 3: HashMap merge (), aby połączyć dwie 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); ) )

Wynik

 HashMap 1: (Spodnie = 230, Buty = 350) HashMap 2: (Koszula = 150, Buty = 320) Połączone HashMap: (Spodnie = 230, Koszula = 150, Buty = 320)

W powyższym przykładzie utworzyliśmy dwa hashmapy o nazwach price1 i price2. Zwróć uwagę na kod,

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

W tym przypadku metoda HashMap forEach () uzyskuje dostęp do każdego wpisu cen hashmap2 i łączy je z cenami hashmap1. Użyliśmy dwóch wyrażeń lambda:

  • (klucz, wartość) -> price.merge (…) - uzyskuje dostęp do każdego wpisu price1 i przekazuje go do merge()metody.
  • (oldValue, newValue) -> (…) - Jest to funkcja remapowania. Porównuje dwie wartości i zwraca mniejszą wartość.

Ponieważ klucz Buty jest obecny w obu hasmapach, wartość Buty jest zastępowana wynikiem funkcji ponownego odwzorowania.

Java HashMap merge () Vs. połóż wszystko

Możemy również użyć tej putAll()metody do scalenia dwóch hashmap. Jeśli jednak klucz jest obecny w obu hashmapach, stara wartość zostanie zastąpiona nową wartością.

W przeciwieństwie do merge()The putAll()metoda nie zapewnia funkcję ponownego mapowania. Dlatego nie możemy zdecydować, jaką wartość zachować dla zduplikowanych kluczy.

Aby dowiedzieć się więcej o tej putAll()metodzie, odwiedź witrynę Java HashMap putAll ().

Interesujące artykuły...