Recentemente mi sono ritrovato a volere una versione di putIfAbsent (...) in java.util.Map a cui è possibile fornire un qualche tipo di metodo factory per creare un'istanza di un oggetto se non è già presente. Ciò semplificherebbe molto codice.Perché Java non ha un metodo putIfAbsent (chiave, fornitore) in Mappa?
Ecco la mia interfaccia modificata:
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;
}
}
Ora la mia domanda: C'è un altro (più facile) modo di fare questo o sono io trascurato qualcosa nella API Java?
FWIW, ['Map # putIfAbsent'] (http://docs.oracle.com/javase/8/docs/api/java/util/Map.html#putIfAbsent-K-V-) è stato aggiunto con Java8. – fxm
in Java 1.8 c'è V putIfAbsent (chiave K, valore V) –
Lo so, ma consente solo di fornire un oggetto invece di un metodo fornitore. –