recorrer que ordenado metodos example entry entre ejemplo diferencia java collections map

que - metodos de hashmap java



¿Por qué Java no tiene un método putIfAbsent(clave, proveedor) en Map? (1)

¿No está computeIfAbsent lo que quiere?

Si la clave especificada ya no está asociada a un valor (o está mapeada a nulo), intenta calcular su valor utilizando la función de mapeo dada y la ingresa en este mapa a menos que sea nula.

La implementación es algo así como:

if (map.get(key) == null) { V newValue = mappingFunction.apply(key); if (newValue != null) { map.put(key, newValue); } }

Por lo tanto, no es exactamente la firma del Supplier<V> que ha publicado, pero está cerca de eso. Tener clave como argumento en la función de mapeo definitivamente tiene sentido.

Recientemente descubrí que quería una versión de putIfAbsent (...) en java.util.Map para la que pueda proporcionar algún tipo de método de fábrica, para crear una instancia de un objeto si aún no está presente. Esto simplificaría una gran cantidad de código.

Aquí está mi interfaz modificada:

import java.util.Map; import java.util.function.Supplier; /** * Extension of the Map Interface for a different approach on having putIfAbsent * * @author Martin Braun */ public interface SupplierMap<K, V> extends Map<K, V> { public default V putIfAbsent(K key, Supplier<V> supplier) { V value = this.get(key); if(value == null) { this.put(key, value = supplier.get()); } return value; } }

Ahora mi pregunta: ¿hay otra forma (más fácil) de hacer esto o simplemente he pasado por alto algo en la API de Java?