java8使用stream流实现树形菜单

实体类

@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());
    }
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值