Actualizaciones atómicas de mapas con compute y merge
Sustituye la consulta y mutación de mapas en varios pasos por computeIfAbsent(), compute() y merge().
List<String> values = groups.get(key);
if (values == null) {
values = new ArrayList<>();
groups.put(key, values);
}
values.add(value);
groups.computeIfAbsent(key, ignored -> new ArrayList<>())
.add(value);
Menos consultas
Evita accesos repetidos a la clave.
Mejor semántica de concurrencia
Los mapas concurrentes pueden realizar atómicamente las actualizaciones compatibles.
Intención clara
La regla de inicialización aparece junto al acceso.
Ampliamente disponible desde JDK 8 (marzo de 2014)
Los métodos de cálculo de Map combinan la intención de consulta y actualización en una sola operación. Usa computeIfAbsent() para la inicialización diferida, compute() cuando el nuevo valor dependa del existente y merge() para combinar un valor proporcionado con otro que ya esté en el mapa. En implementaciones de mapas concurrentes, los cálculos compatibles también evitan las condiciones de carrera causadas por llamadas separadas a get() y put().