java 上下级组装,性能问题

需求,省市上下两级,组装成功一个json对象: 常规做法一:双重for循环,如果省有10个,市有10个,那么时间复杂度是100

 //省级 直辖市
        List<BaseRegion> provincialList = regionDao.getProvince();
        //市级,区级
        List<BaseRegion> municipalList = regionDao.getCity();

        for (BaseRegion region : provincialList) {
            //添加省级 直辖市
            RegionResDto regionResDto = new RegionResDto();
            regionResDto.setId(region.getId());
            regionResDto.setCode(region.getCode());
            regionResDto.setName(region.getName());

            List<RegionResDto> municipal = new ArrayList<>();
            for (BaseRegion baseRegion : municipalList) {
                //添加市级,区级
                if (baseRegion.getParentId().equals(region.getId())) {
                    RegionResDto childResDto = new RegionResDto();
                    childResDto.setId(baseRegion.getId());
                    childResDto.setCode(baseRegion.getCode());
                    childResDto.setName(baseRegion.getName());
                    municipal.add(childResDto);
                    regionResDto.setChildren(municipal);
                }
            }

接下来另一种思路,第一次遍历,就把市级子类集合,存入map中,父id为key,同样省和市都为10的话,复杂度为20;

       //省级 直辖市
        List<BaseRegion> provincialList = regionDao.getProvince();
        //市级,区级
        List<BaseRegion> municipalList = regionDao.getCity();

        Map<Long, List<RegionResDto>> childListMap = new HashMap<>();

        for (BaseRegion baseRegion : municipalList) {
            List<RegionResDto> regionList = childListMap.get(baseRegion.getParentId());
            if (regionList == null) {
                regionList = new ArrayList<>();
            }
            RegionResDto childResDto = new RegionResDto();
            BeanUtils.copyProperties(baseRegion, childResDto);
            regionList.add(childResDto);
            childListMap.put(baseRegion.getParentId(), regionList);
        }

        for (BaseRegion region : provincialList) {
            //添加省级 直辖市
            RegionResDto regionResDto = new RegionResDto();
            BeanUtils.copyProperties(region, regionResDto);
            List<RegionResDto> regionList = childListMap.get(region.getId());
            regionResDto.setChildren(regionList);
            result.add(regionResDto);
            //存入缓存
            JedisUtils.lpush(key, JsonUtils.objectToJson(regionResDto));
        }

猜你喜欢

转载自blog.csdn.net/qq_39723363/article/details/84671612
今日推荐