Java 如果映射中存在值,如何更新该值,或者插入该值
我做了一次搜索,很惊讶这之前没有人问过(至少我找不到) 我有一张这样的地图:Java 如果映射中存在值,如何更新该值,或者插入该值,java,Java,我做了一次搜索,很惊讶这之前没有人问过(至少我找不到) 我有一张这样的地图: Map<String, String> myMap 有更好的方法吗?我个人觉得这种情况有点不必要,而且过于复杂,可能是一行而不是五行 更换将由put()完成: 根据 公共V put(K键, V值)将指定值与此映射中的指定键相关联。如果映射以前包含键的映射,则 旧值被替换 所以你只需要 myMap.put(key, value); 删除所有代码,下面一行就足够了 myMap.put(key, value)
Map<String, String> myMap
有更好的方法吗?我个人觉得这种情况有点不必要,而且过于复杂,可能是一行而不是五行 更换将由
put()
完成:
根据
公共V put(K键,
V值)将指定值与此映射中的指定键相关联。如果映射以前包含键的映射,则
旧值被替换
所以你只需要
myMap.put(key, value);
删除所有代码,下面一行就足够了
myMap.put(key, value);
它已经检查并替换了是否存在任何值。您可以使用
#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;
}
在您的情况下,您不需要对该方法进行额外检查。适用于教育和告知……并非每个人都会查看源代码实现或其“父代”以获得洞察力。
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;
}