gpt4 book ai didi

java - 映射getOrDefault VS getOrUseSupplier

转载 作者:行者123 更新时间:2023-12-01 10:51:16 25 4
gpt4 key购买 nike

我开始学习lambda,而且我不明白为什么Java Map具有:

getOrDefault(Object key, V defaultValue)

而不是(工作原理相同,但是如果缺少值,则将从供应商处获取defaultValue):
getOrUseSupplier(Object key, Supplier<V> defaultValue)

我目前看到的当前解决方案的冒险:
  • defaultValue不必是最终/有效的最终值
  • 看起来更简单,无需了解lambda语法

  • 缺点:
  • 如果在使用getOrDefault时我们放置了新对象创建,则它将立即创建并传递给GC(在使用Supplier时,将完全不会创建)。

  • 我想知道是否还有使用&具有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/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com