如果存在,则如何更新地图中的值,否则插入它

时间:2015-08-07 11:39:46

标签: java

我做了一个搜索,并且惊讶于之前没有被问过(至少我找不到它)。

我有这样的地图:

Map<String, String> myMap

我知道我可以使用containsKey(Object key);检查地图中是否存在密钥,我可以使用replace(String key, String value);替换值,并使用put(String key, String value);自然地设置值

现在,如果我想检查一个值,如果它存在更新它,否则插入它,我必须使用一个条件:

if(myMap.containsKey(key)) {
    myMap.replace(key, value);
} else {
    myMap.put(key, value);
}

有更好的方法吗?我个人认为这种情况有点不必要,并且过于复杂,可能只有一行而不是五行!

3 个答案:

答案 0 :(得分:15)

替换将由put()

完成

来自HashMap

的文档
  

公共V放(K键,       V value)将指定的值与此映射中的指定键相关联。如果地图以前包含该键的映射,则   旧值被替换。

所以你只需要

myMap.put(key, value);

答案 1 :(得分:5)

删除所有代码,以下行就足够了。

myMap.put(key, value);

如果已存在任何值,则已经检查并替换。

答案 2 :(得分:3)

您可以使用#put()方法,如果有现有项目,它将替换现有项目。顺便说一句AbstractMapHashMap的超类)以这种方式实现#replace()

default boolean replace(K key, V oldValue, V newValue) {
     Object curValue = get(key);
     if (!Objects.equals(curValue, oldValue) ||
         (curValue == null && !containsKey(key))) {
         return false;
     }
     put(key, newValue);
     return true;
 }

在您的情况下,您不需要对此方法进行额外检查。