【问题标题】:Java 8 compute() and computeIfPresent() to check an existing valueJava 8 compute() 和 computeIfPresent() 检查现有值
【发布时间】:2019-03-25 22:20:55
【问题描述】:

我有这段代码:

if (notificationSend.get(key) != null && notificationSend.get(key).equals(value)) {
   return true;
} else {
   notificationSend.put(key, value);
   return false;
}

我想知道是否可以使用 Jav8 增强功能重构它,例如 compute()computeIfPresent()computeIfAbsent()

【问题讨论】:

    标签: java collections java-8 hashmap


    【解决方案1】:

    假设value 不为空,您不需要使用条件或任何compute* 方法。

    ValueType oldValue = map.put(key, value);
    return value.equals(oldValue);
    

    【讨论】:

    • 这和OP的代码不一样。在这里,您始终将 (key, value) 条目放在地图中,无论它是否已经存在。
    • @FedericoPeraltaSchaffner 在什么情况下会导致不同的地图内容? (我的意思是,除了狡猾的 hashCode 和 equals 实现)。
    • 在对象有身份的情况下,也就是说:总是。也许这在 OP 的上下文中并不重要,但我认为在你的回答中值得一提。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多