• 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;
                        }
                    }
                }
  • 相关阅读:
    关于c语言变量的内存分布测试程序
    常用ARM指令集及汇编_破解
    CPU读取内存0x30000000地址4个字节数据
    打印十六进制字符串查看内存地址
    JZ2440串口打印字符作为调试
    搭建Linux3.4.2内核编辑环境
    网卡驱动程序
    同步互斥阻塞
    poll机制分析[转]
    安装、配置、启动FTP、SSH或NFS服务
  • 原文地址:https://www.cnblogs.com/moonsoft/p/11712696.html
Copyright © 2020-2023  润新知