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的重复数据处理更强大,对于以上的代码,有更好的写法,请不吝赐教!谢谢喽

  • 相关阅读:
    cb快捷键
    N的阶乘的长度 V2(斯特林近似)
    最大子序列和(Max Sum ,Super Jumping! Jumping! Jumping! )
    关于莫比乌斯和莫比乌斯反演
    最少拦截系统
    set用法详解
    几种数学公式(环排列 母函数 唯一分解定理 卡特兰数 默慈金数 贝尔数 那罗延数)
    最小堆算法
    并查集算法
    dijkstra算法演示
  • 原文地址:https://www.cnblogs.com/MSNS-MTT/p/10537031.html
Copyright © 2011-2022 走看看