递归遍历生成目录树

1.使用JDK8 stream流来进行三级目录分层 

 

    /**
     * 递归分页
     * @return
     */
    @Override
    public List<SmoothMallCategory> findLayPage(){
        List<SmoothMallCategory> list = list();//查询所有数据
        return list.stream().filter(m->{
            return m.getType()==1; //获取一级目录
        }).map(m->{ //给一级目录装二级数据
              m.setChildren(selectMenuList(m.getId(),list));//筛选二级菜单数据 pid = id
              return m;
        }).collect(Collectors.toList());
    }

    /**
     *
     * @param menuId 一级id
     * @param menuList 一级数据
     * @return
     */
    public List<SmoothMallCategory> selectMenuList(Integer menuId,List<SmoothMallCategory> menuList){
        return  menuList.stream().filter(m->m.getParentId()==menuId) //根据一级id获取二级数据
                //根据二级找三级
                .map(m->{
                    m.setChildren(selectMenuList(m.getId(),menuList));
                    return m;
                }).collect(Collectors.toList());
    }

2.

表结构:

实体特殊属性

 

 递归实现:

 /**
     * 获取全部菜单
     * @return
     */
    public List<Permission> getAllMenu(){
        QueryWrapper<Permission> queryWrapper=new QueryWrapper<>();
        List<Permission> permissions = permissionMapper.selectList(queryWrapper);
        //封装
        List<Permission> resultPermission=buildPermission(permissions);

        return resultPermission;
    }
     //初始化父级顶级菜单
    private List<Permission> buildPermission(List<Permission> permissionList) {
        List<Permission> permissionEnd=new ArrayList<>(); //封装数据
        for (Permission permissionNode:permissionList){
            //得到顶级菜单
            if ("0".equals(permissionNode.getPid())){
                permissionNode.setLevel(1);//设置顶层id为1
                //根据顶层 向下遍历获取子菜单
                permissionEnd.add(selectChildren(permissionNode,permissionList));
            }
        }
        return permissionEnd;
    }
    //递归查询菜单
    private Permission selectChildren(Permission permissionNode, List<Permission> permissionList) {
            permissionNode.setChildren(new ArrayList<>());
            for (Permission it:permissionList){
                //id pid 对比
                if (permissionNode.getId().equals(it.getPid())){
                    it.setLevel(permissionNode.getLevel()+1); //level累加
                    //封装子菜单
                    permissionNode.getChildren().add(selectChildren(it,permissionList)); //it就是下一级菜单勒

                }
            }
            return permissionNode;//返回查询到的子菜单
    }

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值