繁体   English   中英

地图实例未读取为对象实例

[英]Map instance not read as object instance

我有以下代码:

List<Map<Object, Object>> list = new ArrayList<>();

list.add(new HashMap<>().put("key", "value"));

但是它告诉我:

无法将列表中的(java.util.Map)添加到(java.lang.Object)

为什么不能add列表功能将Map实例作为Object实例读取? 但是如果这是一个简单的清单

List<Object> simpleList = new 
simpleList.add("
simpleList.add(new HashMap<>().put("sample","sample"));

编辑

这也行不通:

Map<String, String> map = new HashMap<>();
map.put("key", "value");
list.add(map);

列表中的add(java.util.Map)无法应用于(java.util.Map)

编辑2

感谢您的回答,我现在知道为什么它不起作用。 那么,实现此目标的最佳方法是什么? 因为要向列表中添加多个HashMap,所以它在循环中进行迭代。

Map<Object, Object> map = new HashMap<>();
something.foreach{ thing ->{
if(map!=null)
map.clear();
map.put("key", thing);
list.add(map);
}
}

map可变吗? 还是这是错误的代码?

HashMap.put()仅将值作为对象返回,因此执行new HashMap<>().put("key", "value"); 不返回哈希图,而是返回值或null;

put返回:与键关联的先前值;如果没有键的映射关系,则返回null。 (返回null可能还表明该映射先前将null与key关联。)

你需要做

Map<Object, Object> item = new HashMap<>();
item.put("key", "value");

list.add(item);

HashMapput()方法返回先前插入到地图中的值,而不是对象本身。

编辑:您说这不起作用:

Map<String, String> map = new HashMap<>();
map.put("key", "value");
list.add(map);

这是因为您的列表包含类型为“对象映射”的元素,并且您正在尝试插入“字符串映射”

您没有放置java.util.Map<java.lang.Object,java.lang.Object>的实例,而是放置了Hasmap.put的结果,该结果是与键关联的先前值(在您的情况下为null ),如上所述由Map#put的javadoc

您只需要分两个步骤进行操作:

Map<Object, Object> map = new HashMap<>();
map.put("key", "value")
list.add(map);

或一步(有趣,但不建议这样做,因为这会毫无意义地创建一个新的匿名类):

list.add(new HashMap<Object, Object>() {
    private static final long serialVersionUID = 1L;
    {
         put("key", "value");
    }
});

因为put方法

返回值:

与key关联的先前值;如果没有key映射,则为null。 (返回null可能还表明该映射先前将null与key关联。)

它返回先前的值,并且由于您的值属于Object类型,因此它返回一个Object。

您无法将地图创建链接在一起并将某些内容放在一起并返回地图。 您需要将其分为多个步骤:

Map<Object, Object> myMap = new HashMap<>();
myMap.put("key", "value");
list.add(myMap);

Map#put返回与调用put之前的键关联的值(如果没有这样的值,则返回null ),而不是Map本身。

如果您想要一个内联创建Map ,则可以考虑Collections#singletonMap

list.add(new HashMap<>(Collections.singletonMap("key", "value")));

(或者,如果您对不可变的地图没问题的话,只需将呼叫放到new HashMap上)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM