Java put不适用于HashMap类型

Java put不适用于HashMap类型,java,hashmap,Java,Hashmap,下面是我的代码片段 Map<Object, Object> gobalMap = new HashMap<Object, Object>(); Map<String, Map<String, Integer>> mp = new HashMap<String, Map<String, Integer>>(); gobalMap.put("mp",mp ); ((Map<String, Map<String,

下面是我的代码片段

Map<Object, Object> gobalMap = new HashMap<Object, Object>();
Map<String, Map<String, Integer>> mp = new HashMap<String, Map<String, Integer>>();
gobalMap.put("mp",mp );


((Map<String, Map<String, Integer>>)gobalMap.get("mp")).put("A", new HashMap<String, Integer>().put("A", 1));
Map gobalMap=newhashmap();
Map mp=新的HashMap();
gobalMap.put(“mp”,mp);
((Map)gobalMap.get(“mp”)).put(“A”,newhashmap().put(“A”,1));
错误:

The method put(String, Map<String,Integer>) in the type Map<String,Map<String,Integer>> is not applicable for the arguments (String, Integer)
类型映射中的方法put(String,Map)不适用于参数(String,Integer)
我可以知道我哪里做错了吗?

新建HashMap().put(“A”,1)
返回一个整数,因为当您
放入HashMap时,会返回该键所保留的上一个值。因此,它不能是
映射中的值

也许您想将
gobalMap
转换为
Map
。但实际上您正在将
gobalMap.get(“mp”)
转换为
Map

另一方面,这将编译:

((Map<String, Integer>) gobalMap.get("mp")).put("A", new HashMap<String, Integer>().put("A", 1));
((Map)gobalMap.get(“mp”)).put(“A”,newhashmap().put(“A”,1));

虽然我不确定它是否有用。

您没有找到括号。正确的代码为:

((Map<String, Map<String, Integer>>)gobalMap.get("mp")).put("A", new HashMap<String, Integer>()).put("A", 1);
((Map)gobalMap.get(“mp”)).put(“A”,newhashmap()).put(“A”,1);

正如其他人已经指出的
新建HashMap()。put(“A”,1)
返回一个
整数(在本例中,键
“A”
的先前映射值为
null
),该值不适合
映射

您正在创建一个合适的地图,但实际上没有将其放入地图中,因此对该地图的引用将丢失

由于您可能只在嵌套贴图不存在的情况下尝试创建该贴图,请尝试以下操作:

((Map<String, Map<String, Integer>>)gobalMap.get("mp"))
         .computeIfAbsent( "A", k -> new HashMap<String, Integer>())
         .put("A", 1);
((Map)gobalMap.get(“mp”))
.computeIfAbsent(“A”,k->new HashMap())
。付诸表决(“A”,1);
这样做的目的如下:

  • globalMap
    获取并强制转换映射(如果您不确定这不能返回
    null
    ,您也可以在此处使用
    computeIfAbsent()
  • 获取键
    “A”
    的嵌套映射,如果它不存在,则创建一个新映射,添加并返回它
  • 将键
    “A”
    的值
    1
    放入嵌套映射中

  • newhashmap().put(“A”,1)
    返回一个整数。因此,它不能是
    映射
    @khelwood中的值,但mp的值是HashMap..否?为什么new HashMap().put(“A”,1)返回整数?@khelwood,那么这有什么不对。。!你到底想做什么?@JennyRose你使用什么版本的Java?但是gobalMap.put(“mp”,mp)应该返回Map..Noo..?但是为什么我不能在put中使用put呢。如果我把地图放在地图里,那么应该像我这样做吗。。?我在这里很困惑。。!只需检查第二个put返回的内容。它返回一个整数。但是你不能把一个整数放入你的地图中。@JennyRose我已经更新了我的答案。现在应该更清楚了返回整数的意义是什么。。?是否正确..?请注意,
    put()
    返回上一个值,因此如果键
    “a”
    没有值,则
    put(“a”),put(“a”,1)
    将导致NPE。
        Map<Object, Object> gobalMap = new HashMap<Object, Object>();
        Map<String, Map<String, Integer>> mp = new HashMap<String, Map<String, Integer>>();
        gobalMap.put("mp",mp );
        HashMap<String, Integer> aMap = new HashMap<>();
        aMap.put("A", 1);
        ((Map<String, Map<String, Integer>>)gobalMap.get("mp")).put("A", aMap);
    
    ((Map<String, Map<String, Integer>>)gobalMap.get("mp"))
             .computeIfAbsent( "A", k -> new HashMap<String, Integer>())
             .put("A", 1);