O método merge (Key, Value, BiFunctional) da classe HashMap é usado para combinar vários valores mapeados para uma chave usando a função de mapeamento fornecida. Bucket é na verdade um índice de array, esse array é chamado de tabela na implementação de HashMap. Portanto, a tabela [0] é referida como bucket0, a tabela [1] como bucket1 e assim por diante.

  • Se a chave não estiver presente ou estiver associada a nulo, ele simplesmente exibirá a chave junto com o valor correspondente no Hashmap como uma nova entrada.
  • No entanto, se a chave já contém algum valor, a Função de Remapeamento mescla os valores antigos e novos com a chave fornecida
  • Caso a chave seja nula, ela é sempre mapeada para o intervalo 0, pois o hash não é calculado para chaves nulas devido a NullPointerException

Sintaxe:

public V merge(K key, V value,
    BiFunction remappingFunction)

Parâmetros: este método aceita três parâmetros:

  • Chave: qual é a chave para a qual temos um valor particular. Se duas chaves tiverem o mesmo valor, elas serão mescladas.
  • Valor: que é o índice correspondente à chave particular que está armazenada no balde.
  • BiFunction: que é a função que possui dois argumentos a serem usados ​​para calcular o novo mapeamento a partir do valor antigo e do valor dado.

Valor de retorno: este método retorna a chave junto com seu valor se a chave não estiver presente ou estiver associada a nulo. Ou se a chave já contém algum valor, ela mescla o valor antigo com o novo valor usando a técnica de mapeamento.

Os programas abaixo ilustram o método de mesclagem (chave, valor, biFuncional):

Programa 1:

// Java program to demonstrate
// computeIfAbsent(Key, Function) method.
  
import java.util.*;
  
public class GFG {
  
    // Main method
    public static void main(String[] args)
    {
  
        // create a HashMap and add some values
        HashMap<Integer, String>
            map1 = new HashMap<>();
        map1.put(1, "L");
        map1.put(2, "M");
        map1.put(3, "N");
  
        HashMap<Integer, String>
            map2 = new HashMap<>();
        map2.put(1, "B");
        map2.put(2, "G");
        map2.put(3, "R");
  
        // print map details
        System.out.println("HashMap1: "
                           + map1.toString());
  
        System.out.println("HashMap2: "
                           + map2.toString());
  
        // provide value for new key which is absent
        // using computeIfAbsent method
        map2.forEach(
            (key, value)
                -> map1.merge(
                    key,
                    value,
                    (v1, v2)
                        -> v1.equalsIgnoreCase(v2)
                               ? v1
                               : v1 + ", " + v2));
  
        // print new mapping
        System.out.println("New HashMap: " + map1);
    }
}
Saída:
HashMap1: {1 = L, 2 = M, 3 = N}
HashMap2: {1 = B, 2 = G, 3 = R}
Novo HashMap: {1 = L, B, 2 = M, G, 3 = N, R}

Programa 2:

// Java program to demonstrate
// computeIfAbsent(Key, Function) method.
  
import java.util.*;
  
public class GFG {
  
    // Main method
    public static void main(String[] args)
    {
  
        // create a HashMap and add some values
        HashMap<Integer, String>
            map1 = new HashMap<>();
        map1.put(1, "Ram");
        map1.put(2, "Rohan");
        map1.put(3, "Shivam");
  
        HashMap<Integer, String>
            map2 = new HashMap<>();
        map2.put(1, "Tushar");
        map2.put(10, "Satya");
        map2.put(12, "Sundar");
  
        // print map details
        System.out.println("HashMap1: "
                           + map1.toString());
  
        System.out.println("HashMap2: "
                           + map2.toString());
  
        // provide value for new key which is absent
        // using computeIfAbsent method
        map2.forEach(
            (key, value)
                -> map1.merge(
                    key,
                    value,
                    (v1, v2)
                        -> v1.equalsIgnoreCase(v2)
                               ? v1
                               : v1 + ", " + v2));
  
        // print new mapping
        System.out.println("New HashMap: " + map1);
    }
}
Saída:
HashMap1: {1 = Ram, 2 = Rohan, 3 = Shivam}
HashMap2: {1 = Tushar, 10 = Satya, 12 = Sundar}
Novo HashMap: {1 = Ram, Tushar, 2 = Rohan, 3 = Shivam, 10 = Satya, 12 = Sundar}

Referências: https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html#merge-KV-java.util.function.BiFunction-