【问题标题】:Mutable version of Map.merge [duplicate]Map.merge 的可变版本
【发布时间】:2016-03-22 17:11:10
【问题描述】:

Java 8 为Map 接口引入了一些不错的方法。对我来说,差距是merge 方法没有可变版本。

例如,假设mapMap<String, List<Integer>>,而您想要这样做:

List<Integer> list = map.get("a");
if (list == null)
    list = map.put("a", new ArrayList<>());
list.add(1);

(我知道你可以使用 Guava 的 MultiMap 来做这种事情,但我对标准 Java 很感兴趣。)

对我来说,感觉在 Java 8 中应该有一种很好的简化方法,但我找不到。我认为它应该是一个单一的方法调用,比如

map.mutableMerge("a", 1, ArrayList::new, List::add);     // Not real code

但使用新方法我能想到的最好方法是

map.computeIfAbsent("a", k -> new ArrayList<>());
map.compute("a", (k, v) -> {
    v.add(1);
    return v;
});

但这并不比原来的好。我错过了什么明显的东西吗?

【问题讨论】:

    标签: java dictionary java-8


    【解决方案1】:

    computeIfAbsent 返回与键关联的值,该值可以是当前值,也可以是映射函数构造的值。所以你可以简单地拥有

    map.computeIfAbsent("a", k -> new ArrayList<>()).add(1);
    

    【讨论】:

    • 我知道他们一定是想到了,而且我只是太厚了,我会在 15 分钟内接受。谢谢。
    猜你喜欢
    • 2016-04-09
    • 2015-04-09
    • 2011-09-08
    • 1970-01-01
    • 2016-12-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-13
    • 2021-12-16
    相关资源
    最近更新 更多