【发布时间】:2015-01-23 11:55:07
【问题描述】:
我最近发现自己想要一个 java.util.Map 中的 putIfAbsent(...) 版本,您可以提供某种工厂方法来实例化一个对象(如果它不存在)。这将简化很多代码。
这是我修改后的界面:
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;
}
}
现在我的问题是: 是否有另一种(更简单的)方法可以做到这一点,或者我只是忽略了 Java API 中的某些内容?
【问题讨论】:
-
FWIW,
Map#putIfAbsent是用 Java8 添加的。 -
在 Java 1.8 中有 V putIfAbsent(K key, V value)
-
我知道,但它只允许提供 Object 而不是 Supplier 方法。
-
上面的代码有什么问题。我认为它应该有效。
标签: java collections map