今年年初,初次使用Mybatis作为持久层框架做个人项目,也是第一次使用框架。在单表按某些字段进行group by 分组时,老是不能达到预期效果,便想到在查询出所需数据后,在后台进行来实现分组统计功能。
private List<Amount> getListByGroup(List<Amount> list) {
List<Amount> result = new ArrayList<Amount>();
Map<String, Double> map = new HashMap<String, Double>();
for (Amount amount : list) {
if (map.containsKey(amount.getSwName())) {
map.put(amount.getSwName(), map.get(amount.getSwName()) + amount.getAmount());
} else {
map.put(amount.getSwName(), amount.getAmount());
}
}
for (Entry<String, Double> entry : map.entrySet()) {
result.add(new Amount(entry.getKey(), entry.getValue()));
}
return result;
}
上面代码主要思想:把传进来的List放到Map里,从List数据第二个开始,遇到相同的swName就相加,并把和放在该swName下;否则把swName和amount一起put,list的第一个对象也是这样处理的,然后再放回到一个List里。
要注意的是Amount类中一定要有public Amount(String swName,Double amount)这个构造方法。编译器也会报The constructor Amount(String, Double) is undefined错误。