zoukankan      html  css  js  c++  java
  • List<Map>去重并合并数量

    今天在查询出的sql中,出现了部门名称和部门ID有重合的数据!当然这样在页面上展示也会容易一起误导!查询出的数据结构如下图

    希望根据deptid中 >最后一个节点id把deptname 合并成>最后一个节点名称并且origincode 数量合并,现在贴代码,做个记录:

        List<Map> dataList = bigScreenService.queryEventOrginCodeNum();
            List<Map<String, Object>> resultList = new ArrayList<>();
            if (dataList != null && dataList.size() > 0) {
                for (int k = 0; k < dataList.size(); k++) {
                    Map orginMap = dataList.get(k);
                    String deptName = "";//部门名称判断
                    if (orginMap.get("deptName") != null && !"".equals(orginMap.get("deptName"))) {
                        deptName = orginMap.get("deptName").toString().replaceAll("&gt;", ">");
                        String[] deptArr = deptName.split(">");
                        deptName = deptArr[deptArr.length - 1];
                    }
    
                    String deptId = (String) orginMap.get("deptId");//部门ID判断
                    if (deptId.indexOf(">") != -1) {
                        String[] deptIdArr = deptId.split(">");
                        deptId = deptIdArr[deptIdArr.length - 1];
                    }
                    orginMap.put("deptName", deptName);
                    orginMap.put("deptId", deptId);
    
    
                    //0为新增数据,1为拼接,对部门ID链最后一个节点相同的部门做相加
                    String deptChainId = (String) dataList.get(k).get("deptId");
                    int flag = 0;
                    for (int j = 0; j < resultList.size(); j++) {
                        String newDeptChainId = String.valueOf(resultList.get(j).get("deptId"));
                        if (deptChainId.equals(newDeptChainId)) {
                            Number sameNum = (Number) dataList.get(k).get("originCode");
                            Number sameNum2 = (Number) resultList.get(j).get("originCode");
                            int originCodeNum = sameNum.intValue() + sameNum2.intValue();
                            resultList.get(j).put("originCode", originCodeNum);
                            flag = 1;
                            continue;
                        }
    
                    }
                    if (flag == 0) {
                        resultList.add(dataList.get(k));
                    }
                }
            }

     注:java.lang.Number是Integer,Long的父类.

     期望结果如下图:

    本人用的是jdk7版本的,貌似听说jdk8对于map的重复数据处理更强大,对于以上的代码,有更好的写法,请不吝赐教!谢谢喽

  • 相关阅读:
    ant
    hudson
    【消息队列MQ】各类MQ比较
    日本出行
    使用Eclipse Installer安装Eclipse
    Firebug控制台详解
    浮动
    CSS3
    HTML制作视频简介
    使用I/O流复制指定文件
  • 原文地址:https://www.cnblogs.com/MSNS-MTT/p/10537031.html
Copyright © 2011-2022 走看看