我有这段代码:
List<Map<Object, Object>> list = new ArrayList<>();
list.add(new HashMap<>().put("key", "value"));
然而它告诉我:
在List中添加(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);
在List中添加(java.util.Map)不能 应用于(java.util.Map)
编辑2 :
感谢您的回答我现在明白为什么它不起作用。那么实现这一目标的最佳方式是什么?它在循环中迭代,因为我正在向List添加多个HashMaps。
Map<Object, Object> map = new HashMap<>();
something.foreach{ thing ->{
if(map!=null)
map.clear();
map.put("key", thing);
list.add(map);
}
}
map
是否可变?或者这是不好的代码?
答案 0 :(得分:3)
#pragma once
只返回作为对象的值,因此执行HashMap.put()
不会返回散列映射,而是返回值或null;
put 返回:与key关联的上一个值,如果没有key的映射,则返回null。 (null返回也可以指示映射先前将null与key关联。)
你需要做
new HashMap<>().put("key", "value");
答案 1 :(得分:2)
Traceback (most recent call last):
File "t_polygon.py", line 14, in <module>
p = Polygon(t)
File "C:\Program Files (x86)\Python\Lib\site-packages\sympy\geometry\polygon.py", line 126, in __new__
vertices = [Point(a, dim=2, **kwargs) for a in args]
File "C:\Program Files (x86)\Python\Lib\site-packages\sympy\geometry\polygon.py", line 126, in <listcomp>
vertices = [Point(a, dim=2, **kwargs) for a in args]
File "C:\Program Files (x86)\Python\Lib\site-packages\sympy\geometry\point.py", line 157, in __new__
raise ValueError('Nonzero coordinates cannot be removed.')
ValueError: Nonzero coordinates cannot be removed.
中的put()
方法返回先前在地图中插入的值,而不是对象本身。
编辑: 你说这不起作用:
HashMap
那是因为你的列表包含类型&#34;对象映射&#34;的元素。并且您正在尝试插入&#34;字符串映射&#34;
答案 2 :(得分:2)
您没有放置java.util.Map<java.lang.Object,java.lang.Object>
的实例,而是Hasmap.put的结果,这是与Map#put所述的密钥相关的先前值(在您的情况下为null
) &#39; 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");
}
});
答案 3 :(得分:2)
因为put方法
返回:
与key关联的上一个值,如果没有则返回null 映射为密钥。 (null返回也可以指示地图 以前使用密钥关联null。)
它返回前一个值,因为你的值是Object类型,它返回一个Object。
您无法链接地图创建并将某些内容放入其中并返回地图。 您需要将其拆分为多个步骤:
Map<Object, Object> myMap = new HashMap<>();
myMap.put("key", "value");
list.add(myMap);
答案 4 :(得分:2)
Map#put
会在调用put
之前返回与该关键字相关联的值(如果没有此值,则返回null
),而不是Map
本身。
如果您希望oneliner创建Map
,您可以考虑Collections#singletonMap
:
list.add(new HashMap<>(Collections.singletonMap("key", "value")));
(或者,如果您使用不可变地图,则只需将呼叫暂停至new HashMap
)