Fusionar Java HashMap ()

El método merge () de Java HashMap inserta la asignación clave / valor especificada en el mapa hash si la clave especificada ya no está presente.

Si la clave especificada ya está asociada con un valor, el método reemplaza el valor anterior con el resultado de la función especificada.

La sintaxis del merge()método es:

 hashmap.merge(key, value, remappingFunction)

Aquí, hashmap es un objeto de la HashMapclase.

merge () Parámetros

El merge()método toma 3 parámetros:

  • clave : clave con la que se asociará el valor especificado
  • valor : valor que se asociará con la clave, si la clave ya está asociada con algún valor
  • remappingFunction : resultado que se asociará con la clave si la clave ya está asociada con un valor

merge () Valor de retorno

  • devuelve el nuevo valor asociado con la clave
  • devuelve nullsi no hay ningún valor asociado con la clave

Nota : Si se produce remappingFunction null, se elimina la asignación de la clave especificada .

Ejemplo 1: HashMap merge () para insertar una nueva entrada

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

Salida

 HashMap: (Pant = 150, Bag = 300, Shoes = 200) Precio de la camisa: 100 HashMap actualizado: (Pant = 150, Shirt = 100, Bag = 300, Shoes = 200)

En el ejemplo anterior, hemos creado un mapa de hash llamado precios. Note la expresión,

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

Aquí, hemos utilizado la expresión lambda, (oldValue, newValue) -> oldValue + newValue)como función de reasignación. Para obtener más información sobre la expresión lambda, visite Java Lambda Expressions.

Dado que la camiseta clave no está presente en los precios, el merge()método inserta el mapeo Shirt=100. Y se ignora el resultado de la función de reasignación.

Ejemplo 2: HashMap merge () para insertar entrada con clave duplicada

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

Salida

 HashMap: (Madrid = España, Canberra = Australia, Washington = América) Washington: América / EE. UU. Actualizado HashMap: (Madrid = España, Canberra = Australia, Washington = América / EE. UU.), 

En el ejemplo anterior, hemos creado un mapa de hash llamado países. Note la expresión,

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

Aquí, hemos utilizado la expresión lambda, (oldValue, newValue) -> oldValue + "/" + newValue)como función de reasignación.

Dado que la clave Washington ya está presente en los países, el valor anterior se reemplaza por el valor devuelto por la función de reasignación. Por tanto, el mapeo de Washington incluye el valor América / EE. UU.

Ejemplo 3: HashMap merge () para fusionar dos 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); ) )

Salida

 HashMap 1: (Pantalón = 230, Zapatos = 350) HashMap 2: (Camisa = 150, Zapatos = 320) HashMap combinado: (Pantalón = 230, Camisa = 150, Zapatos = 320)

En el ejemplo anterior, hemos creado dos hashmaps llamados precios1 y precios2. Fíjate en el código

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

Aquí, el método HashMap forEach () accede a cada entrada de los precios del mapa hash2 y la fusiona con los precios del mapa hash1. Hemos utilizado dos expresiones lambda:

  • (clave, valor) -> precios.merge (…) - Accede a cada entrada de precios1 y la pasa al merge()método.
  • (oldValue, newValue) -> (…) - Es una función de reasignación. Compara dos valores y devuelve el valor más pequeño.

Dado que la clave Zapatos está presente en ambos mapas de hash, el valor de Zapatos se reemplaza por el resultado de la función de reasignación.

Java HashMap merge () vs. poner todo

También podemos usar el putAll()método para fusionar dos hashmaps. Sin embargo, si una clave está presente en ambos hashmaps, el valor anterior se reemplaza por el nuevo valor.

A diferencia de merge(), el putAll()método no proporciona la función de reasignación. Por lo tanto, no podemos decidir qué valor almacenar para las claves duplicadas.

Para obtener más información sobre el putAll()método, visite Java HashMap putAll ().

Articulos interesantes...