需求,省市上下兩級,組裝成功一個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));
}