map.getOrDefault().add() 在 Java 中不起作用

map.getOrDefault().add() in Java not works

传统代码运行良好,如下所示:

Map<Integer, List<Integer>> map = new HashMap<>();
if (!map.containsKey(1)) {
   map.put(1, new ArrayList<>());
}
map.get(1).add(2);

现在我想试试 getOrDefault 的魔力:

map.getOrDefault(1, new ArrayList<>()).add(2);

但是如果我使用上面的行,那么 map.get(1) 是空的。

为什么?

因为getOrDefault,顾名思义,只从地图上获取东西。它不会向地图添加新的 KVP。当键不存在时,您传递给 getOrDefault 的默认值是 returned,但不会添加到映射中,因此您将添加 2 到数组列表中立即扔掉。

换句话说,这就是您的 getOrDefault 代码正在做的事情:

ArrayList<Integer> value;
if (!map.containsKey(1)) {
    value = new ArrayList<>();
} else {
    value = map.get(1);
}
value.add(2);

您应该改用 computeIfAbsent。如果键不存在,此方法实际上将函数中的 return 值添加到映射中:

map.computeIfAbsent(1, x -> new ArrayList<>()).add(2);

或者你可以这样做:

if(!map.contansKey(1)) map.put(1, new ArrayList<>());
map.get(1).add(2);

所以你可以保存这些行 ;)