Sobes.tech
Middle

Qual é a diferença entre os métodos put e compute?

sobes.tech IA

Resposta da IA

put(key, value) simplesmente associa value a key, substituindo o valor existente se a chave já estiver presente.

compute(key, remappingFunction) calcula um novo valor para key usando a função fornecida remappingFunction. A função recebe a chave atual e seu valor atual (ou null se a chave não existir) e retorna um novo valor que será associado à chave. Se a função retornar null, a entrada é removida.

Principais diferenças:

  • Tratamento de chaves ausentes: put insere um novo valor. compute pode usar o valor anterior (até mesmo null) para calcular um novo.
  • Dependência do valor anterior: put define o valor independentemente do anterior. compute usa explicitamente o valor anterior na função de cálculo.
  • Remoção de entradas: put(key, null) remove a entrada. compute remove a entrada se a função de cálculo retornar null.

Exemplo de uso:

// Uso de put
Map<String, Integer> countsPut = new HashMap<>();
countsPut.put("apple", 1);
countsPut.put("apple", 2); // Substitui 1 por 2

// Uso de compute para incrementar um contador
Map<String, Integer> countsCompute = new HashMap<>();
countsCompute.compute("banana", (key, value) -> value == null ? 1 : value + 1); // banana será 1
countsCompute.compute("banana", (key, value) -> value == null ? 1 : value + 1); // banana será 2
countsCompute.compute("cherry", (key, value) -> null); // Remove cherry se existia