java根据父类id生成Tree形数据(Stream流方式)

在这里插入图片描述

java根据父类id生成Tree形数据(Stream()流方式处理),亲测简单好用
实体类不进行创建,只展示核心的代码!!!
主要分为以下几个步骤:
(1)先根据接口传入的对象查询出对应的数据

List<ProjectLeader> list = projectLeaderService.list(Condition.getLikeQueryWrapper(projectLeader));

(2)遍历当前查询出来的数据,找出所有顶级(规定父类id为0的数据,具体按自己的需求而定)

List<ProjectLeader> collect = list.stream()
.filter(o -> StrUtil.equals("0", o.getInviteTenders()))

(3)给当前父级childList设置子数据

.peek(o -> o.setChildList(getChildList(o, list)))

(4)拿到当前对象和查询出来的list集合进行递归,查到父类id没有子数据递归结束(根据当前父类 找出子类, 并通过递归找出子类的子类)

private List<ProjectLeader> getChildList(ProjectLeader projectLeader, List<ProjectLeader> list) {
        return list.stream()
                //筛选出父节点id == parentId 的所有对象 => list
                .filter(o -> StrUtil.equals(String.valueOf(projectLeader.getId()), o.getInviteTenders()))
                .peek(o -> o.setChildList(getChildList(o, list)))
                .collect(Collectors.toList());
    }

完整代码如下

public AjaxResult listWithTree(ProjectLeader projectLeader) {
        // 1. 先查出所有数据
        List<ProjectLeader> list = projectLeaderService.list(Condition.getLikeQueryWrapper(projectLeader));
        List<ProjectLeader> collect = list.stream()
                // 2. 找出所有顶级(规定 0 为顶级)
                .filter(o -> StrUtil.equals("0", o.getInviteTenders()))
                // 3.给当前父级的 childList 设置子
                .peek(o -> o.setChildList(getChildList(o, list)))
                // 4.收集
                .collect(Collectors.toList());
        return AjaxResult.success(collect);
    }

    // 根据当前父类 找出子类, 并通过递归找出子类的子类
    private List<ProjectLeader> getChildList(ProjectLeader projectLeader, List<ProjectLeader> list) {
        return list.stream()
                //筛选出父节点id == parentId 的所有对象 => list
                .filter(o -> StrUtil.equals(String.valueOf(projectLeader.getId()), o.getInviteTenders()))
                .peek(o -> o.setChildList(getChildList(o, list)))
                .collect(Collectors.toList());
    }

创作不易,点个赞再走吧!!!

  • 7
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值