zoukankan      html  css  js  c++  java
  • List<Map>中根据map的同一指标项数据——去重代码

         

    先看网络上,博客经常出现的错误代码:

    for(ABatchAddCheckVO aBatchAddCheckVO : addList){
                dto.put("aac001",aBatchAddCheckVO.getAac001());//设置人员编号 
                //由于sql语句使用union查询_sjql和ac4,如果2个表都有记录,就会存在重复,需要去重
                List<Map> list = aFQService.getBatchAc5_SJQL(dto);
                //list数据去重——冒泡去重
                for(int i = 0; i < list.size(); i++){
                    //得到list中每一个map
                    Map map= list.get(i);
                    for (int j = 1; j < list.size(); j++) {
                        Map map2= list.get(j);
                        if (map.get("qlbzlb").equals(map2.get("qlbzlb"))) {
                            list.remove(j);
                            continue;
                        }
                    }
                }
    
                if(ValidateUtil.isNotEmpty(list)){
                    succList.addAll(list);// 把查出来的标识数据,直接存到成功列表中
                }else{
                    errList.add(aBatchAddCheckVO);//没有查出来,就是错误数据
                }
            }

    一样的:

     if ("2".equals(dto.getAsString("czfs"))) {
                List<Key> list = JSONObject.parseArray(dto.getAsString("list"), Key.class);
                List<ADetailVO> aDetailVOList = new ArrayList<>();
    
                //需要对list根据aac001去重,一个aac001会有多条记录,后台方法支持,根据一个aac001查出多条问题记录,
                // 如果不根据aac001去重,就会出现一个人重复插入事件表和明细表问题
    
                //list数据去重——冒泡去重
                for(int i = 0; i < list.size(); i++){
                    //得到list中每一个map
                    Map map= list.get(i);
                    for (int j = 1; j < list.size(); j++) {
                        Map map2= list.get(j);
                        if (map.get("aac001").equals(map2.get("aac001"))) {
                            list.remove(j);
                            continue;
                        }
                    }
                }

    注意:

    上述代码有bug,不是冒泡排序,会出问题,使用时,会过滤掉(即:remove 掉一半的数据)

    更改如下:

                //需要对list根据aac001去重,一个aac001会有多条记录,后台方法支持,根据一个aac001查出多条问题记录,
                // 如果不根据aac001去重,就会出现一个人重复插入事件表和明细表问题
    
                //list数据去重——冒泡去重
                for(int i = 0; i < list.size() - 1; i++){
                    //得到list中每一个map
                    Map map= list.get(i);
                    for(int j = list.size() - 1; j > i; j--){
                        Map map2= list.get(j);
                        if (map.get("aac001").equals(map2.get("aac001"))) {
                            list.remove(j);
                            continue;
                        }
                    }
                }
  • 相关阅读:
    关押罪犯
    食物链
    归并排序(分治)
    并查集+路径压缩
    3的幂的和
    斐波那契数列的第N项
    0和5
    扔盘子
    线段相交
    回文字符串
  • 原文地址:https://www.cnblogs.com/moonsoft/p/11712696.html
Copyright © 2011-2022 走看看