List模仿SQL的group by分组

在一次的项目上,为了避免客户端进行数据库查询,而且客户端操作的这些数据量也不太多。所以就想直接在客户端用Java实现group by的形式;

Java代码   收藏代码
  1. public List groupByList(final List<XxxObject> List) {  
  2.         if(CollectionUtils.isEmpty(listformdetail)){  
  3.             return ;  
  4.         }  
  5.         List groupbyList = new ArrayList();  
  6.         Map<String, Integer> map = new HashMap<String, Integer>();  
  7.           
  8.         for (XxxObject obj : List) {  
  9.             if (obj.getXxx() != null  
  10.                     && obj.getXxx().getXyy() != null) {  
  11.                 Xyy xyy = obj.getXxx().getXyy();  
  12.                 //org.apache.commons.lang.StringUtils  
  13.                 // key值的构成:Xxx编码:Xxx名称,以这两个来进行分组,统计  
  14.                 String key = StringUtils.trimToEmpty(xyy.getCode()) + ":"  
  15.                         + StringUtils.trimToEmpty(xyy.getName());  
  16.                 if (map.containsKey(key)) {  
  17.                     Integer val = obj.getAmount().intValue() + map.get(key).intValue();  
  18.                     map.put(key, val);  
  19.                 } else {  
  20.                     map.put(key, obj.getAmount().intValue());  
  21.                 }  
  22.             }  
  23.         }  
  24.   
  25.         for (Map.Entry<String, Integer> entry : map.entrySet()) {  
  26.             String[] names = StringUtils.splitByWholeSeparator(entry.getKey(), ":");  
  27.             Xyy rc = new Xyy();  
  28.             XxxDTO dto = new XxxDTO();  
  29.             rc.setCode(names[0]);  
  30.             rc.setName(names[1]);  
  31.             dto.setXyy(rc);  
  32.             dto.setAmount(Double.valueOf(entry.getValue()));  
  33.             groupbyList.add(dto);  
  34.         }  
  35.         return groupbyList;  
  36.     }  

 做一下标识,避免老了,记不住这些小技巧

1 
0 
分享到:   
参考知识库
MySQL知识库 13121  关注 | 1410  收录
评论
1 楼  jianpx 2011-11-15  
我最近也是遇到要使用类似group by 功能的情景, 不过我操作的是文件, 所以我联想到用sort 命令。例如:
1,2,3
1,1,2
1,1,1
这样的例子, 如果要按照前两列来排序group by则可以通过 如下命令实现:
sort -t, -k1,2
如果还要group by之后做统计, 可以用uniq -c 就行了。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值