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;
                        }
                    }
                }
  • 相关阅读:
    DAY09(for语句)
    Python 下载 tushare 数据,然后调用 C++ DLL 计算 wMA 存入本地 csv 文件再 python 读取
    Python socket编程之八:阶段性总结
    Ctex + Lyx = 自用 Latex 编辑环境
    matlab下二重积分的蒙特卡洛算法
    实验9 根据材料编程
    实验5 编写、调试具有多个段的程序
    实验4 [bx]和loop的使用
    实验3 编程、编译、连接、跟踪
    汇编语言第三章总结
  • 原文地址:https://www.cnblogs.com/moonsoft/p/11712696.html
Copyright © 2011-2022 走看看