【问题标题】:Return HashMap added to List<Object>返回添加到 List<Object> 的 HashMap
【发布时间】:2013-02-11 13:09:50
【问题描述】:

当我尝试返回已添加到类型列表中的 HashMap 时,我在 JAVA 中遇到问题:List&lt;Object&gt;。我知道我可以使用其他类型的列表,但我需要使用List&lt;Object&gt;

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”,但这不起作用。

如果有人知道另一种解决方法,但我只需要使用一个列表。

【问题讨论】:

    标签: java list object hashmap


    【解决方案1】:

    通常我认为我可以写: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&lt;String, String&gt;?)那会很好。您列表中的每个 元素都会成为地图吗?如果是这样,您为什么要使用List&lt;Object&gt; 而不是更强类型的列表?如果某些元素不会成为地图,您如何判断哪些元素会成为地图? (这些是你应该仔细考虑的事情。)

    【讨论】:

    • 非常感谢您的出色回答 - 这很有效。我理解您关于 List 映射的论点,但我正在创建一个 Storm 拓扑并在系统中发送元组,我需要使用 List。我需要添加一些信息,而 List 是我可以发送这些额外信息的唯一方法。
    【解决方案2】:

    希望对你有帮助..

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

    通常,您的列表属于 object 类型。所以首先将其转换为 HashMap 类型,然后从 map 中获取值

    请注意以下代码

     System.out.println(((HashMap<String, String>)listOfObjects.get(i)).get("x"));
    

    【讨论】:

      猜你喜欢
      • 2022-09-24
      • 1970-01-01
      • 1970-01-01
      • 2018-07-17
      • 2014-05-13
      • 1970-01-01
      • 2022-07-11
      • 1970-01-01
      • 2016-06-13
      相关资源
      最近更新 更多