O método computeIfPresent (Key, BiFunction) da classe HashMap que permite calcular o valor de um mapeamento para a chave especificada se a chave já estiver associada a um valor (ou for mapeada para nulo).

  • Se a função de mapeamento deste método retornar nulo, o mapeamento será removido.
  • Se a função de remapeamento lançar uma exceção, a exceção é relançada e o mapeamento permanece inalterado.
  • Durante o cálculo, a modificação deste mapa usando este método não é permitida.
  • Sintaxe:

public Object computeIfPresent(Object key,
                  BiFunction remappingFunction)

Parâmetros: este método aceita dois parâmetros:

  • chave : chave com a qual o valor deve ser associado.
  • remappingFunction : função para fazer a operação em valor.

Retorna: Este método retorna um novo valor remapeado associado à chave especificada ou nulo se o mapeamento retornar nulo .

Os programas abaixo ilustram o método computeIfPresent (Key, BiFunction):

Exemplo 1: Este exemplo demonstra o caso em que a chave não está no hashmap.

// Java program to demonstrate
// computeIfPresent(Key, BiFunction) method.
  
import java.util.concurrent.*;
import java.util.*;
  
public class GFG {
    public static void main(String[] args)
    {
  
        // Create a HashMap and add some values
        HashMap<String, Integer> wordCount = new HashMap<>();
        wordCount.put("Geeks", 1);
        wordCount.put("for", 2);
        wordCount.put("geeks", 3);
  
        // print HashMap details
        System.out.println("Hashmap before operation :\n "
                           + wordCount);
  
        // provide new value for keys which is present
        // using computeIfPresent method
        wordCount.computeIfPresent("Geek",
                                   (key, val) -> val + 100);
  
        // print new mapping
        System.out.println("HashMap after operation :\n "
                           + wordCount);
    }
}
Saída:
Hashmap antes da operação:
 {geeks = 3, Geeks = 1, para = 2}
HashMap após a operação:
 {geeks = 3, Geeks = 1, para = 2}

Exemplo 2: Este exemplo demonstra o caso em que a chave está presente no hashmap.

// Java program to demonstrate
// computeIfPresent(Key, BiFunction) method.
  
import java.util.concurrent.*;
import java.util.*;
  
public class GFG {
    public static void main(String[] args)
    {
  
        // Create a HashMap and add some values
        HashMap<String, Integer> wordCount = new HashMap<>();
        wordCount.put("Geeks", 1);
        wordCount.put("for", 2);
        wordCount.put("geeks", 3);
  
        // print HashMap details
        System.out.println("Hashmap before operation :\n "
                           + wordCount);
  
        // provide new value for keys which is present
        // using computeIfPresent method
        wordCount.computeIfPresent("for",
                                   (key, val) -> val + 1);
  
        // print new mapping
        System.out.println("HashMap after operation :\n "
                           + wordCount);
    }
}
Saída:
Hashmap antes da operação:
 {geeks = 3, Geeks = 1, para = 2}
HashMap após a operação:
 {geeks = 3, Geeks = 1, para = 3}

Referência: https://docs.oracle.com/javase/8/docs/api/java/util/HashMap.html#computeIfPresent-K-java.util.function.BiFunction-