java层级分类stream流递归写法

该篇文章介绍了如何使用Java编程,通过数据库操作查询SysMenu表中的数据,特别是处理菜单的层级关系,通过递归方法获取所有子节点,以便展示一个完整的菜单树结构。
摘要由CSDN通过智能技术生成

    public void test(){
        // 查询所有数据
        List<SysMenu> sysMenus = sysMenuMapper.selectList(null);

        // 在这里过滤根节点 也就是parentId为0的,0是最高节点(父节点)
        List<SysMenu> collect = sysMenus.stream().filter(sysMenu -> sysMenu.getParentId().equals(0L))
                .map(sysMenu -> {
                    // 在这里进行递归,将所有数据跟当前parentId为0的对象Id进行比较找到自己的子节点
                    sysMenu.setChildrenList(getChildrenData(sysMenus,sysMenu));
                    return sysMenu;
                }).toList();
    }

    List<SysMenu> getChildrenData(List<SysMenu> sysMenuList,SysMenu sysMenu){
        // 通过拥有所有数据的集合的 parentId 和 传入对象的Id进行匹配
        // 假设现在 现在对象是 SysMenu{(parentId:0,id:1)}
        // 那么现在查找的就是 parentId 为 1的数据
        // 查出来parentId为1的数据有 三个
        // list=[用户管理、菜单管理、部门管理]
        List<SysMenu> list = sysMenuList.stream().filter(s -> s.getParentId().equals(sysMenu.getId()))
                .map(sysMenu1 -> {
                    // 再去比较,拿自己的子集
                    sysMenu1.setChildrenList(getChildrenData(sysMenuList, sysMenu1));
                    return sysMenu1;
                })
                .toList();

        return list;
    }
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值