zoukankan      html  css  js  c++  java
  • 一个留了两个星期的bug,基础忘光了

    List<ScaleAndEnterpriseDTO> copyDtoList = new ArrayList<>();
            dtoList.sort((o1, o2) -> o2.getCumulativeInvestmentMoney().compareTo(o1.getCumulativeInvestmentMoney()));
            for (int i = 0; i < dtoList.size(); i++) {
                ScaleAndEnterpriseDTO dto = dtoList.get(i);
                dto.setCumulativeNumber(i + 1);
                dto.setCumulativeProvinceName(getMonthLink(dto.getCumulativeProvinceNumber(), month, dto.getCumulativeProvinceName()));
                dto.setBalanceProvinceName(getMonthLink(dto.getBalanceProvinceNumber(), month, dto.getBalanceProvinceName()));
                dto.setCustomerProvinceName(getMonthLink(dto.getCustomerProvinceNumber(), month, dto.getCustomerProvinceName()));
                // 注意不能直接往copyDtoList.add(dto),因为这样会引用的同一个对象,在dtoList里面对这个dto做了修改,copyDtoList里面的这个dto也是同样被修改了
                ScaleAndEnterpriseDTO copyDto = new ScaleAndEnterpriseDTO();
                BeanUtil.copyProperties(dto, copyDto, false);
                copyDtoList.add(copyDto);
            }
    
            dtoList.sort((o1, o2) -> o2.getInvestmentBalance().compareTo(o1.getInvestmentBalance()));
            for (int i = 0; i < dtoList.size(); i++) {
                ScaleAndEnterpriseDTO copyDto = copyDtoList.get(i);
                ScaleAndEnterpriseDTO dto = dtoList.get(i);
                System.out.println(dto);
                copyDto.setBalanceNumber(i + 1);
                copyDto.setBalanceProvinceName(dto.getBalanceProvinceName());
                copyDto.setBalanceGroup(dto.getBalanceGroup());
                copyDto.setInvestmentBalance(dto.getInvestmentBalance());
                copyDto.setBalanceProvinceNumber(dto.getBalanceProvinceNumber());
    //            System.out.println(copyDto);
            }
    
            dtoList.sort((o1, o2) -> Long.compare(o2.getCustomerPeopleNumber(), o1.getCustomerPeopleNumber()));
            for (int i = 0; i < dtoList.size(); i++) {
                ScaleAndEnterpriseDTO copyDto = copyDtoList.get(i);
                ScaleAndEnterpriseDTO dto = dtoList.get(i);
                copyDto.setCustomerGroup(dto.getCustomerGroup());
                copyDto.setCustomerNumber(i + 1);
                copyDto.setCustomerProvinceName(dto.getCustomerProvinceName());
                copyDto.setCustomerPeopleNumber(dto.getCustomerPeopleNumber());
                copyDto.setCustomerProvinceNumber(dto.getCustomerProvinceNumber());
            }

    当时发现在dtoList第二次排序的时候,会出现属性重复的问题,然后debug发现这个问题之后,一直想不通为什么会这样。明明没有对dto做任何set,但是在dtoList的第二次排序之后循环到第二次,dto就会被改变。

    今天突然想到之前有过一次这种写法:

    List<DTO> copyDtoList = dtoList;

    这个当时就注意到引用的问题,然后换成了

    List<DTO> copyDtoList = new ArrayList<>(dtoList);
  • 相关阅读:
    正则化--Lambda
    uwsgi配置cheaper模式进行自动弹性
    采集容器内存并写到excel
    通过进程id找到进程对应的容器并统计每个进程的内存占用写到excel里
    基于celery的任务管理
    基于Redis做内存管理
    uWSGI
    nginx
    服务发现
    绑核与巨页
  • 原文地址:https://www.cnblogs.com/woyujiezhen/p/13938486.html
Copyright © 2011-2022 走看看