我做了一个搜索,并且惊讶于之前没有被问过(至少我找不到它)。
我有这样的地图:
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);
}
有更好的方法吗?我个人认为这种情况有点不必要,并且过于复杂,可能只有一行而不是五行!
答案 0 :(得分:15)
替换将由put()
:
来自HashMap
的文档公共V放(K键, V value)将指定的值与此映射中的指定键相关联。如果地图以前包含该键的映射,则 旧值被替换。
所以你只需要
myMap.put(key, value);
答案 1 :(得分:5)
删除所有代码,以下行就足够了。
myMap.put(key, value);
如果已存在任何值,则已经检查并替换。
答案 2 :(得分:3)
您可以使用#put()
方法,如果有现有项目,它将替换现有项目。顺便说一句AbstractMap
(HashMap
的超类)以这种方式实现#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;
}
在您的情况下,您不需要对此方法进行额外检查。