将列表<object [] =“”>转换为hashmap

时间:2017-07-20 21:13:06

标签: java arraylist hashmap

我正在尝试将下面的列表对象数组转换为hashmap。转换后,我只得到hashmap中的第二个数组元素。任何人都可以告诉我在我的代码中我做错了什么。

//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"
}]

3 个答案:

答案 0 :(得分:0)

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

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

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

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

然后你经历了第二次迭代,因为记住两个对象[]

所以你最终得到了

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

您可以尝试执行HashMap<String, List<String>>

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

答案 1 :(得分:0)

当您遍历total时,每次传递都会将相同的键放入HashMap中。这有效地取代了每个密钥的值。

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

答案 2 :(得分:0)

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

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