English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Tutoriales básicos de Java

Control de flujo de Java

Java Array

Java orientado a objetos (I)

Java orientado a objetos (II)

Java orientado a objetos (III)

Manejo de excepciones en Java

Java Lista (List)

Java Queue (cola)

Conjuntos Map de Java

Conjuntos Set de Java

Entrada y salida de Java (I/O)

Reader de Java/Writer

Otras temáticas de Java

Uso y ejemplo del método merge() de Java HashMap

Java HashMap 方法

Si la clave especificada no existe, el método merge() de Java HashMap insertará la clave especificada/El mapeo de valores se inserta en el mapeo de hash.

Pero, si la clave especificada ya está asociada a un valor, este método reemplazará el valor antiguo con el resultado de la función especificada.

La sintaxis del método merge() es:

hashmap.merge(key, value, remappingFunction)

Parámetros de merge()

El método merge() de HashMap utiliza3Parámetros:

  • key -  Para especificar el valor asociado a la clave

  • value - Si la clave ya está asociada a cualquier valor, se necesita el valor asociado a la clave

  • remappingFunction - Si la clave ya está asociada a un valor, el resultado se asocia a la clave.

Valor devuelto por merge()

  • Se devuelve el nuevo valor asociado a la clave (key)

  • Si no hay un valor asociado a la clave (key), se devuelve null

Atención:Si el resultado de remappingFunction es null, se eliminará el mapeo especificado para la clave.

示例1:Insertar nuevo elemento en HashMap merge()

import java.util.HashMap;
class Main {
  public static void main(String[] args) {
    //创建 HashMap
    HashMap<String, Integer> prices = new HashMap<>();
    //向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) -> old value + newValue);
    System.out.println("Precio de la camisa: " + returnedValue);
    //Imprimir el HashMap actualizado
    System.out.println("HashMap actualizado: ") + prices);
  };
};

输出结果

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, creamos un mapeo de hash llamado prices. Nota la expresión

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

Aquí usamos la expresión lambda (oldValue, newValue) -> oldValue + newValue) como función remappingFunction. Para obtener más información sobre las expresiones lambda, visiteJava Lambda 表达式

Dado que la clave Shirt no existe en prices, el método merge() establecerá Shirt=100 Insertar en el mapeo. Y se ignorará el resultado de remappingFunction.

示例2: Insertar en HashMap merge() entrada con clave duplicada

import java.util.HashMap;
class Main {
  public static void main(String[] args) {
    // 创建 HashMap
    HashMap<String, String> countries = new HashMap<>();
    // 向HashMap插入条目
    countries.put("Washington", "America");
    countries.put("Canberra", "Australia");
    countries.put("Madrid", "Spain");
    System.out.println("HashMap: ") + countries);
    // Mapeo de la clave Washington
    String returnedValue = countries.merge("Washington", "USA", (oldValue, newValue) -> old value + "/" + newValue);
    System.out.println("Washington: ") + returnedValue);
    // Imprimir el HashMap actualizado
    System.out.println("HashMap actualizado: ") + countries);
  };
};

输出结果

HashMap: {Madrid=Spain, Canberra=Australia, Washington=America}
Washington: América/USA
HashMap actualizado: {Madrid=Spain, Canberra=Australia, Washington=America/USA},

En el ejemplo anterior, creamos un mapeo de cadenas llamado countries. Nota la expresión

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

在这里,我们使用了lambda表达式(oldValue, newValue) -> oldValue + "/" + newValue) 作为 remappingFunction。

由于键Washington已经存在countries中,所以旧值将由remappingFunction返回的值替换。因此,Washington 的映射包括值 America/USA。

示例3:HashMap merge() 合并两个 HashMap

import java.util.HashMap;
class Main {
  public static void main(String[] args) {
    //创建 HashMap
    HashMap<String, Integer> prices1 = new HashMap<>();
    //向HashMap插入条目
    prices1.put("Pant", 230);
    prices1.put("Shoes", 350);
    System.out.println("HashMap 1: \ + prices1);
    //创建另一个hashmap
    HashMap<String, Integer> prices2 = new HashMap<>();
    //向HashMap插入条目
    prices2.put("Shirt", 150);
    prices2.put("Shoes", 320);
    System.out.println("HashMap 2: \ + prices2);
    // forEach()访问prices2的每个条目
    // merge()将每个条目从prices2插入到prices1
    prices2.forEach((key, value) -> prices1.merge(key, value, (oldValue, newValue) -> {
      
      //返回较小的值
      if (oldValue < newValue) {
        return oldValue;
      };
      else {
        return newValue;
      };
    });
    System.out.println("合并后的 HashMap: ", + prices1);
  };
};

输出结果

HashMap 1: {Pant=230, Shoes=350}
HashMap 2: {Shirt=150, Shoes=320}
合并后的 HashMap: {Pant=230, Shirt=150, Shoes=320}

在上面的示例中,我们创建了两个名为prices1和prices2的哈希映射。注意代码,

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

在这里,HashMap forEach()方法访问哈希表prices2的每个条目,并将其合并到哈希表prices1中。 我们使用了两个lambda表达式:

  • (key, value) -> prices.merge(...) - 它访问prices1的每个条目,并将其传递给merge()方法。

  • (oldValue, newValue) -> {...}  - 这是一个重新映射函数(remappingFunction)。它比较两个值并返回较小的值。

由于键Shoes在两个哈希映射中都存在,因此Shoes的值被重新映射函数(remappingFunction)的结果替换。

Java HashMap merge()与putAll()

我们还可以使用putAll()方法合并两个哈希映射。 但是,如果两个哈希映射中都存在键,则旧值将被新值替换

与merge()不同,putAll()方法不提供重新映射功能。 因此,我们无法确定要为重复键存储的值。

要了解有关该putAll()方法的更多信息,请访问Java HashMap putAll()

Java HashMap 方法