在一次的项目上,为了避免客户端进行数据库查询,而且客户端操作的这些数据量也不太多。所以就想直接在客户端用Java实现group by的形式;
- public List groupByList(final List<XxxObject> List) {
- if(CollectionUtils.isEmpty(listformdetail)){
- return ;
- }
- List groupbyList = new ArrayList();
- Map<String, Integer> map = new HashMap<String, Integer>();
- for (XxxObject obj : List) {
- if (obj.getXxx() != null
- && obj.getXxx().getXyy() != null) {
- Xyy xyy = obj.getXxx().getXyy();
- //org.apache.commons.lang.StringUtils
- // key值的构成:Xxx编码:Xxx名称,以这两个来进行分组,统计
- String key = StringUtils.trimToEmpty(xyy.getCode()) + ":"
- + StringUtils.trimToEmpty(xyy.getName());
- if (map.containsKey(key)) {
- Integer val = obj.getAmount().intValue() + map.get(key).intValue();
- map.put(key, val);
- } else {
- map.put(key, obj.getAmount().intValue());
- }
- }
- }
- for (Map.Entry<String, Integer> entry : map.entrySet()) {
- String[] names = StringUtils.splitByWholeSeparator(entry.getKey(), ":");
- Xyy rc = new Xyy();
- XxxDTO dto = new XxxDTO();
- rc.setCode(names[0]);
- rc.setName(names[1]);
- dto.setXyy(rc);
- dto.setAmount(Double.valueOf(entry.getValue()));
- groupbyList.add(dto);
- }
- return groupbyList;
- }
做一下标识,避免老了,记不住这些小技巧
1
顶
顶
0
踩
踩
评论
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 就行了。
1,2,3
1,1,2
1,1,1
这样的例子, 如果要按照前两列来排序group by则可以通过 如下命令实现:
sort -t, -k1,2
如果还要group by之后做统计, 可以用uniq -c 就行了。
参考知识库