先把符合条件的数据从数据库取出,利用stream流在内存中进入递归操作;
可用于码表查询(行政区划等信息)
public List<CodeBaseVo> queryAllCodeTreeByQuery(String typeCode) {
List<TbCode> byType = codeMapper.findByTbCodeTypeTypeCode(typeCode);
return getChild(null, byType);
}
private List<CodeBaseVo> getChild(Long id, List<TbCode> source) {
List<CodeBaseVo> result = new ArrayList<>();
source.stream().filter(tbCode -> {
if (id == null) {
return tbCode.getParentId() == null;
} else {
return tbCode.getParentId() != null && tbCode.getParentId().equals(id);
}
}).forEach(tbCode -> {
CodeBaseVo codeBaseVo = WrapperBeanCopier.copyProperties(tbCode, CodeBaseVo.class, null);
//遍历子级
List<CodeBaseVo> child = getChild(tbCode.getId(), source);
codeBaseVo.setChildrenList(child);
result.add(codeBaseVo);
});
return result;
}