繁体   English   中英

Java Mybatis结果到Hashmap

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM