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

Tutorial Básico de Java

Controle de fluxo do Java

Array do Java

Java orientado a objetos (I)

Java orientado a objetos (II)

Java orientado a objetos (III)

Tratamento de Exceções Java

Lista (List) do Java

Fila (Queue) do Java

Conjunto do Java Map

Conjunto do Java Set

Entrada e saída do Java (I/O)

Reader do Java/Writer

Outros tópicos do Java

Uso e exemplo do método merge() do Java HashMap

Métodos HashMap Java

Se a chave especificada não existir, o método merge() do Java HashMap inserirá a chave especificada/O mapeamento de valor é inserido no mapeamento hash.

Mas, se a chave especificada já estiver associada a um valor, o método substituirá o valor antigo pelo resultado da função especificada.

A sintaxe do método merge() é:

hashmap.merge(key, value, remappingFunction)

Parâmetros do merge()

O método merge() do HashMap usa3Parâmetros:

  • key -  Para especificar o valor associado à chave

  • value - Se a chave já estiver associada a qualquer valor, é necessário o valor associado à chave

  • remappingFunction - Se a chave já estiver associada a um valor, o resultado será associado à chave.

Retorno do valor do merge()

  • Retorna o novo valor associado à chave (key)

  • Se não houver valor associado à chave (key), retornará null

AtençãoSe o resultado da função de remapeamento for null, a mapeamento do chave especificada será removido.

Exemplo1Inserção de novo item no HashMap merge()

import java.util.HashMap;
class Main {
  public static void main(String[] args) {
    //cria HashMap
    HashMap<String, Integer> prices = new HashMap<>();
    //insere itens no 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("Preço da camisa: ", + returnedValue);
    //Imprimir o HashMap atualizado
    System.out.println("HashMap atualizado: ") + prices);
  }
}

Resultados de saída

HashMap: {Pant=150, Sacola=300, Calçados=200}
Preço da camisa: 100
HashMap atualizado: {Pant=150, Shirt=100, Sacola=300, Calçados=200}

No exemplo acima, criamos um mapeamento hash chamado prices. Observe a expressão

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

Aqui, usamos a expressão lambda (oldValue, newValue) -> oldValue + newValue) como função remappingFunction. Para obter mais informações sobre expressões lambda, acesseExpressões Lambda Java.

Como a chave Shirt não existe no mapeamento prices, o método merge() atribuirá Shirt=100 inserir no mapeamento. E o resultado da função remappingFunction será ignorado.

Exemplo2Inserção de itens com chave duplicada no método merge() do HashMap

import java.util.HashMap;
class Main {
  public static void main(String[] args) {
    // cria HashMap
    HashMap<String, String> countries = new HashMap<>();
    // insere itens no HashMap
    countries.put("Washington", "América");
    countries.put("Canberra", "Austrália");
    countries.put("Madrid", "Espanha");
    System.out.println("HashMap: ") + countries);
    // Mapeamento de combinação da chave Washington
    String returnedValue = countries.merge("Washington", "USA", (oldValue, newValue) -> old value + "/" + newValue);
    System.out.println("Washington: ") + returnedValue);
    // Imprimir o HashMap atualizado
    System.out.println("HashMap atualizado: ") + countries);
  }
}

Resultados de saída

HashMap: {Madrid=Espanha, Canberra=Austrália, Washington=América}
Washington: América/USA
HashMap atualizado: {Madrid=Espanha, Canberra=Austrália, Washington=América/USA},

No exemplo acima, criamos um mapeamento hash chamado countries. Observe a expressão

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

Aqui, usamos a expressão lambda (oldValue, newValue) -> oldValue + "/" + como função de remapeamento.

Como a chave Washington já existe no countries, o valor antigo será substituído pelo valor retornado pela função de remapeamento. Portanto, o mapeamento de Washington inclui o valor América/EUA。

Exemplo3:HashMap merge() mescla dois HashMap

import java.util.HashMap;
class Main {
  public static void main(String[] args) {
    //cria HashMap
    HashMap<String, Integer> prices1 = new HashMap<>();
    //insere itens no HashMap
    prices1.put("Pant", 230);
    prices1.put("Shoes", 350);
    System.out.println("HashMap 1: " + prices1);
    //cria outro hash map
    HashMap<String, Integer> prices2 = new HashMap<>();
    //insere itens no HashMap
    prices2.put("Shirt", 150);
    prices2.put("Shoes", 320);
    System.out.println("HashMap 2: " + prices2);
    // forEach() acessa o prices2de cada entrada
    // merge() adiciona cada entrada do prices2insere no prices1
    prices2.forEach((key, value) -> prices1.merge(key, value, (oldValue, newValue) -> {
      
      //retorna o valor menor
      if (oldValue < newValue) {
        return oldValue;
      }
      else {
        return newValue;
      }
    });
    System.out.println("HashMap: ", + prices1);
  }
}

Resultados de saída

HashMap 1: {Pant=230, Shoes=350}
HashMap 2: {Shirt=150, Shoes=320}
HashMap: {Pant=230, Shirt=150, Shoes=320}

No exemplo acima, criamos dois hash maps chamados prices1e prices2do mapeamento de hash. Observe o código,

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

Aqui,HashMap.forEach()método acessa o hash map prices2de cada entrada, e a adicionamos ao hash map prices1中。 Nós usamos duas expressões lambda:

  • (key, value) -> prices.merge(...) - Ele acessa prices1de cada entrada, e passa para o método merge().

  • (oldValue, newValue) -> {...}  - Esta é uma função de mapeamento de novo (remappingFunction). Ela compara dois valores e retorna o menor.

Como a chave Shoes existe em ambos os mapeamentos de hash, o valor de Shoes é substituído pelo resultado da função de mapeamento de novo (remappingFunction).

HashMap merge() e putAll() Java

Também podemos usar o método putAll() para combinar dois mapeamentos de hash. No entanto, se ambos os mapeamentos de hash contiverem a mesma chave, o valor antigo será substituído pelo novo.

Diferente de merge(), o método putAll() não oferece funcionalidade de mapeamento de novo. Portanto, não podemos determinar o valor a ser armazenado para a chave repetida.

Para obter mais informações sobre o método putAll(), acesseHashMap putAll() Java.

Métodos HashMap Java