需求,省市上下两级,组装成功一个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));
}