我在JAVA中遇到问题,当我尝试返回已添加到类型列表:List<Object>
的HashMap时。我知道我可以使用其他类型的列表,但我需要使用List<Object>
List<Object> listOfObjects = new ArrayList<Object>();
HashMap<String, String> hashmap = new HashMap<String,String>();
hashmap.put("x", "foo");
hashmap.put("y", "bar");
listOfObjects.add(hashmap);
for (int i = 0; i < listOfObjects.size(); i++) {
System.out.println(listOfObjects.get(i));
}
我已将我的hashmap添加到我的listOfObject中,但是如何从listOfObject获取HashMap以便我可以使用HashMap命令。 fx:hashmap.get(“x),它将返回”foo“。
通常我认为我只能写:listOfObjects.get(0).get(“x”)并且它将返回“foo”但是这不起作用。
如果有人知道另外的工作,但我只需要使用List。
答案 0 :(得分:3)
通常我认为我只能写:listOfObjects.get(0).get(“x”)并且它将返回“foo”但是这不起作用。
不,它不会 - 因为listOfObjects.get(0)
的类型只是Object
。你怎么期望编译器知道它是一个地图?
您可以使用:
HashMap<String, String> map = (HashMap<String, String>) listOfObjects.get(0);
// Use map...
...但请注意,由于Java中泛型的性质,该转换不是真正确保映射中的所有键/值对都是“字符串到字符串”。即使您最初使用过,演员也会工作:
Map<Integer, Integer> badMap = new HashMap<Integer, Integer>();
badMap.put(0, 10);
listOfObjects.add(badMap);
你会收到警告,但重要的是要明白这意味着什么。目前还不清楚你的用例是什么,但如果你可以更强烈地键入它(也许创建一个新的类包含一个Map<String, String>
?)那将是好的。 列表中的每个元素都是地图吗?如果是这样,为什么使用List<Object>
而不是更强类型的列表?如果某些元素不是地图,你怎么知道哪些是? (这些是你应该仔细考虑的事情。)
答案 1 :(得分:0)
我希望这会对你有所帮助..
List<Object> listOfObjects = new ArrayList<Object>();
HashMap<String, String> hashmap = new HashMap<String,String>();
hashmap.put("x", "foo");
hashmap.put("y", "bar");
listOfObjects.add(hashmap);
for (int i = 0; i < listOfObjects.size(); i++) {
System.out.println(((HashMap<String, String>)listOfObjects.get(i)).get("x"));
}
通常,您的列表是对象类型。首先将其转换为HashMap类型,然后从map
中获取值请注意以下代码
System.out.println(((HashMap<String, String>)listOfObjects.get(i)).get("x"));