实体类
@Data
public class CourseCategoryDTO {
@Schema(description = "主键id")
private String id;
@Schema(description = "分类名称")
private String name;
@Schema(description = "父节点id")
private String parentid;
@Schema(description = "子节点")
private List<CourseCategoryDTO> childrenTreeNodes;
}
数据库查询全部结果
@Override
public List<CourseCategoryDTO> courseCategoryTreeNodes() {
List<CourseCategory> courseCategoryList = this.lambdaQuery()
.eq(CourseCategory::getIsShow, YesOeNoEnum.YES.getCode())
.orderByDesc(CourseCategory::getOrderby)
.list();
if (CollectionUtils.isEmpty(courseCategoryList)) {
return Collections.emptyList();
}
return this.createTreeNode(courseCategoryList);
}
获取顶层树
private List<CourseCategoryDTO> createTreeNode(List<CourseCategory> courseCategoryList) {
List<CourseCategoryDTO> dtoList = CourseCategoryConverter.INSTANCE.entity2DTOList(courseCategoryList);
return dtoList.stream()
.filter(item -> "0".equals(item.getParentid()))
.peek(item -> item.setChildrenTreeNodes(this.getChildList(item,dtoList)))
.toList();
}
递归获取子节点
private List<CourseCategoryDTO> getChildList(CourseCategoryDTO parentDTO, List<CourseCategoryDTO> dtoList) {
return dtoList.stream()
.filter(item -> parentDTO.getId().equals(item.getParentid()))
.peek(item -> item.setChildrenTreeNodes(this.getChildList(item,dtoList)))
.collect(Collectors.toList());
}