[英]Java Mybatis result to Hashmap
PSQL 查询返回 2 个值名称和计数的列表。
我想把它放到一个 Hashmap 并返回值。
查询结果会像
name count
completed 2
successful 8
inprogress 1
我能够在结果变量中得到结果。 但是在 for 循环中,我得到的是entry.get("name")中的 Integer,所以我无法得出最终结果。
The final output of this function will be Map<String, Integer>
and it will be converted into JSON response to API by the controller.
{
"completed":2,
"successful":8,
"inprogress":1
}
当前代码
List<Map<String, Integer>> result = null;
Map<String, Integer> finalresult = new HashMap<>();
map.put("id", id);
result = sqlSession.selectList("com.class.getresult",map);
System.out.println(result);
if (!result.isEmpty()) {
for (Map<String, Integer> entry : result) {
finalresult.put(entry.get("name"), entry.get("count"));
}
}
return finalresult;
如何从列表中获取名称?
我猜您希望累积返回的结果并按状态(已完成、成功、进行中)对它们进行分组。
然后,您应该遍历每个List
元素Map
(s) 并对结果进行分组,如果已经存在,则添加状态计数。
如果您的输入result
如下所示:
[{in progress=2, completed=1}, {completed=1, successful=2}, {in progress=3, successful=5}]
if (!result.isEmpty()) {
for (Map<String, Integer> map : result) {
for (Map.Entry<String, Integer> entry : map.entrySet()) {
finalresult.compute(entry.getKey(), (k, v) -> (v == null) ? entry.getValue() : v + entry.getValue());
}
}
}
return finalresult;
否则,如果您的输入result
为以下形式:
[{name=completed, count=1}, {name=in progress, count=2}, {name=successful, count=3}]
然后,您需要获取 map 各个插槽的条目:
if (!result.isEmpty()) {
for (Map<String, String> map : result) {
finalresult.put(map.get("name"), Integer.parseInt(map.get("count")));
}
}
return finalresult;
或者,如果您在Java 1.8+上,则只需一行语句:
result.forEach(() -> finalresult.put(result.get("name"), Integer.parseInt(result.get("count"))));
如果您使用的是最新版本的 Mybatis,可以尝试以下方法:
@Select("SELECT name, count FROM YOUR_TABLE")
@MapKey("name")
public Map<String,Integer> getResult( Map parameters );
希望以上对你有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.