我正在尝试将下面的列表对象数组转换为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"
}]
答案 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);
}