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