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;
 }