【问题标题】:Converting list<Object []> into hashmap将 list<Object []> 转换为 hashmap
【发布时间】:2017-07-20 21:13:05
【问题描述】:

我正在尝试将以下列表对象数组转换为哈希图。转换后,我只得到哈希图中的第二个数组元素。谁能告诉我我的代码做错了什么。

//List

List<Object[]> total =
    [
        [
            "01-08-2017",
            "A",
            "827",
            10
        ],
        [
            "12-07-2017",
            "A",
            "100",
            250
        ]
    ]


final Map<String, String> statsMap = new HashMap<String, String>();
        for (Object[] tuple : total) {
            statsMap.put("date", tuple[0].toString());
            statsMap.put("type", tuple[1].toString());
            statsMap.put("code", tuple[2].toString());
            statsMap.put("count", tuple[3].toString());
        }

//Output
{
"date":"12-07-2017",
"type":"A",
"code":"100",
"count":"250"
}

我期待如下输出

[{
"date":"01-08-2017",
"type":"A",
"code":"827",
"count":"10"
},
{
"date":"12-07-2017",
"type":"A",
"code":"100",
"count":"250"
}]

【问题讨论】:

  • HashMap 是一个键/值系统,因此并不能真正适应您的情况,您有一个准确的想法吗?
  • @azro 是的,我知道,我正在尝试将列表转换为键值对
  • 好的,但是 key 呢?什么是价值?你只有 4 个元素的数组
  • 您似乎只是不断地覆盖每个键。

标签: java arraylist hashmap


【解决方案1】:

当您遍历 total 时,每次遍历都将相同的键放入 HashMap。这有效地替换了每个键的值。

您似乎想要做的是创建一个包含四个属性的类,然后创建该类的实例列表。

【讨论】:

    【解决方案2】:

    您正在寻找的结果似乎是List&lt;Map&lt;String, String&gt;&gt;,即键值对列表。在这种情况下,您的代码应如下所示:

    List<Object[]> total = ...;
    final List<Map<String, String>> stats = new ArrayList<Map<String, String>>();
    
    for (Object[] tuple : total) {
        HashMap<String, String> map = new HashMap<String, String>();
        map.put("date", tuple[0].toString());
        map.put("type", tuple[1].toString());
        map.put("code", tuple[2].toString());
        map.put("count", tuple[3].toString());
        stats.add(map);
    }
    

    【讨论】:

    • 如果你真的阅读了我的帖子,你会发现我们的答案大不相同@azro
    • 你甚至复制/粘贴评论//date1...xD
    • 你是对的,我从错误的位置复制了我的 for 循环的内部部分,我的错误。您的代码不再出现在我的答案中。
    【解决方案3】:

    记住hashmaps本质上是字典,键映射到一个值,多个键可以映射到同一个值,但是键不能映射到多个值,考虑到这一点

    statsMap.put("date", tuple[0].toString());
    statsMap.put("type", tuple[1].
    statsMap.put("code", tuple[2].toString());
    statsMap.put("count", tuple[3].toString());
    

    您每次都使用相同的密钥。您的 List 总数中有两个 Object[] 。 所以在第一次迭代中,它看起来像这样

    "date":"01-08-2017",
    "type":"A",
    "code":"827",
    "count":"10"
    

    但是你会经历第二次迭代,因为记住两个对象[]

    所以你最终得到了

    "date":"12-07-2017",
    "type":"A",
    "code":"100",
    "count":"250"
    

    你可以试试HashMap&lt;String, List&lt;String&gt;&gt;

    而不是将键映射到对象值,而是将键映射到包含对象值列表的列表。

    【讨论】:

      猜你喜欢
      • 2018-07-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-12-22
      • 1970-01-01
      相关资源
      最近更新 更多