Niedawno odkryłem, że chcę wersji putIfAbsent (...) w java.util.Map, że możesz podać jakąś metodę fabryczną, aby utworzyć obiekt, jeśli jeszcze go nie ma. Uprościłoby to wiele kodu.Dlaczego Java nie ma metody putIfAbsent (klucz, dostawca) w Mapie?
Oto mój zmodyfikowany interfejs:
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;
}
}
Teraz moje pytanie: Czy istnieje inny (łatwiej) sposób to zrobić albo ja po prostu pomijane coś w Java API?
FWIW, ['Map # putIfAbsent'] (http://docs.oracle.com/javase/8/docs/api/java/util/Map.html#putIfAbsent-K-V-) został dodany za pomocą Java8. – fxm
w języku Java 1.8 istnieje V putIfAbsent (klucz K, wartość V) –
Wiem, ale pozwala tylko na dostarczenie obiektu zamiast metody dostawcy. –