一个多叉树,链路太长了,全部加载出来浪费时间和空间资源。所以需要控制一下递归的次数,类似懒加载的思想,这样就可以节省开销,提高用户体验了
封装的vo:
/**
* 行政区边界VO
*/
@Data
public class DictDistrictVO {
/**
* 主键
*/
private Long id;
/**
* 地区名字
*/
private String name;
/**
* 行政级别
*/
private String level;
/**
* 行政中心
*/
private String center;
private List<DictDistrictVO>dictDistrictVOList;
}
递归的方法:
public void getChildren(DictDistrictVO dictDistrictVO, Integer high) {
DictDistrictDO dictDistrictDO = dictDistrictMapper.selectOne(new QueryWrapper<DictDistrictDO>().eq("id", dictDistrictVO.getId()));
List<DictDistrictDO> dictDistrictDOList = dictDistrictMapper.selectList(new QueryWrapper<DictDistrictDO>().eq(
"parent_code", dictDistrictDO.getCode()));
List<DictDistrictConfigDO> dictDistrictConfigDOList = dictDistrictConfigMapper.selectList(new QueryWrapper<DictDistrictConfigDO>()
.eq("district_parent_id", dictDistrictDO.getId()));
List<Long> dictDistrictDOIds = dictDistrictConfigDOList.stream().map(DictDistrictConfigDO::getDistrictId).collect(Collectors.toList());
List<DictDistrictDO> dictDistrictRemoveList = null;
if (dictDistrictDOIds != null && dictDistrictDOIds.size() > 0) {
dictDistrictRemoveList = dictDistrictMapper
.selectList(new QueryWrapper<DictDistrictDO>().in("id", dictDistrictDOIds));
dictDistrictDOList.removeAll(dictDistrictRemoveList);
}
List<DictDistrictVO> dictDistrictVOList = BeanUtil.beanCopyList(dictDistrictDOList, DictDistrictVO.class);
dictDistrictVO.setDictDistrictVOList(dictDistrictVOList);
//控制递归的次数
high--;
if (high > 1 && dictDistrictVOList != null) {
for (DictDistrictVO node : dictDistrictVOList) {
getChildren(node, high);
}
}
}
希望对你有些帮助。。。