我开始学习lambda,而且我不明白为什么Java Map具有:
getOrDefault(Object key, V defaultValue)
而不是(工作原理相同,但是如果缺少值,则将从供应商处获取defaultValue):
getOrUseSupplier(Object key, Supplier<V> defaultValue)
我目前看到的当前解决方案的冒险:
缺点:
我想知道是否还有使用&具有getOrDefault而不是getOrUseSupplier的缺点。您还可以告诉我Java库中是否有这样的方法:
static <V> V getOrUseSupplier(Map<?, V> map, Object key, Supplier<V> supplier)
试图从 map 上获取值(value),如果不存在,则从供应商那里获取值(value)。
最佳答案
getOrUseSupplier()
中最接近的Map
等效项称为computeIfAbsent()
,它允许使用键来计算值,与仅使用Supplier
相比,它提供了更大的灵活性。与Map
不同,它还将计算的值存储在getOrDefault
中。这是因为它们有不同的用例,并没有真正的关联。虽然getOrDefault
通常用于返回“安全”非空默认值(例如,返回空字符串而不是null),以指示某些内容应在 map 中,但是computeIfAbsent()
表示某些内容必须在 map 中,如果不是,则需要创建它,否则程序的内部状态不正确。
下面的示例忽略 key ,仅使用供应商的值(value)。
public static <V,T> V getOrUseSupplier(Map<T, V> map, T key, Supplier<V> supplier) {
return map.computeIfAbsent(key, k -> supplier.get());
}
关于java - 映射getOrDefault VS getOrUseSupplier,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36742258/