JAVA递归遍历权限表,获取权限树形结构

权限表结构
在这里插入图片描述
递归调用的代码

    private Object test(List<Permission> permissions, List<Permission> allList){//pid为0的权限数组,所有权限数组
        List<Object> objList = new ArrayList<>();
        for (Permission permission : permissions) {//遍历第一级别的权限
            Integer id = permission.getId();//获取这一个权限的id

            List<Permission> childNodes = new ArrayList<>();//子节点权限集合
            for (Permission aList : allList) {//遍历所有权限,把父级id为当前id的权限找出来存在childNodes中
                final Integer pId1 = aList.getPId();
                if (pId1.equals(id)){
                    childNodes.add(aList);
                }
            }//获取完  permissions(遍历的当前权限)中第i个   所有的子节点存入childNodes
            if (childNodes.size()!=0){//如果这个权限有下一级的权限,则继续递归
                Object res = test(childNodes,allList);//递归得到obj的结果
                Map<Object,Object> map = new HashMap<>();//把递归得到的结果

                PermisTree permisTree = new PermisTree();
                permisTree.setId(permission.getId());
                permisTree.setName(permission.getName());
                objList.add(permisTree);

                map.put("sub",res);//存放子集
                objList.add(map);

            }else {//如果没有下一级权限,则输出 obj  id:name
                PermisTree permisTree = new PermisTree();
                permisTree.setId(permission.getId());
                permisTree.setName(permission.getName());

                objList.add(permisTree);
            }


        }
        //获取完  permissions中 所有子节点
//        System.err.println(objList);
        return objList;

    }

调用test函数后获取的的map格式的数据,需要再将其转化为json格式

  final Object test = test(aaa, permissions);//通过第一级别获取到所有的权限
        final String res = JSON.toJSONString(test);//格式转换
        final JSONArray objects = JSON.parseArray(res);

最后返回的结果

{
    "message": "操作成功",
    "status": 200,
    "token": null,
    "refreshToken": null,
    "data": [
        {
            "name": "管理后台",
            "id": 1
        },
        {
            "sub": [
                {
                    "name": "首页",
                    "id": 2
                },
                {
                    "name": "医院管理",
                    "id": 3
                },
                {
                    "name": "医生管理",
                    "id": 4
                },
                {
                    "sub": [
                        {
                            "name": "医生注册申请",
                            "id": 5
                        },
                        {
                            "name": "医生管理",
                            "id": 6
                        }
                    ]
                },
                {
                    "name": "系统管理",
                    "id": 7
                },
                {
                    "sub": [
                        {
                            "name": "用户管理",
                            "id": 8
                        },
                        {
                            "name": "角色权限管理",
                            "id": 9
                        },
                        {
                            "name": "假体类型配置",
                            "id": 10
                        },
                        {
                            "name": "平台配置",
                            "id": 11
                        },
                        {
                            "name": "系统公告",
                            "id": 12
                        },
                        {
                            "name": "系统日志",
                            "id": 13
                        }
                    ]
                },
                {
                    "name": "test",
                    "id": 21
                }
            ]
        },
        {
            "name": "2D规划",
            "id": 14
        },
        {
            "name": "3D规划",
            "id": 15
        },
        {
            "sub": [
                {
                    "name": "3D医生权限",
                    "id": 17
                },
                {
                    "name": "3D临床专员权限",
                    "id": 18
                },
                {
                    "name": "3D临床经理权限",
                    "id": 19
                }
            ]
        },
        {
            "name": "JCT定制",
            "id": 16
        }
    ]
}

突然发现上面那个有点太chun了 = =
更新的test方法

   //allList怎么变成全局变量
    private Object test(List<Permission> permissions, List<Permission> allList){//pid为0的权限数组,所有权限数组
        List<Object> objList = new ArrayList<>();
        for (Permission permission : permissions) {//遍历第一级别的权限
            Integer id = permission.getId();//获取这一个权限的id

            List<Permission> childNodes = new ArrayList<>();//子节点权限集合
            for (Permission aList : allList) {//遍历所有权限,把父级id为当前id的权限找出来存在childNodes中
                final Integer pId1 = aList.getPId();
                if (pId1.equals(id)){
                    childNodes.add(aList);
                }
            }//获取完  permissions(遍历的当前权限)中第i个   所有的子节点存入childNodes
            if (childNodes.size()!=0){//如果这个权限有下一级的权限,则继续递归
                Object res = test(childNodes,allList);//递归得到obj的结果
//                Map<Object,Object> map = new HashMap<>();//把递归得到的结果

                PermisTree permisTree = new PermisTree();
                permisTree.setId(permission.getId());
                permisTree.setName(permission.getName());
                permisTree.setChildNode(res);
                objList.add(permisTree);

//                map.put("sub",res);//存放子集
//                objList.add(map);

            }else {//如果没有下一级权限,则输出 obj  id:name
                PermisTree permisTree = new PermisTree();
                permisTree.setId(permission.getId());
                permisTree.setName(permission.getName());

                objList.add(permisTree);
            }
        }
        //获取完  permissions中 所有子节点
//        System.err.println(objList);
        return objList;

    }

返回数据的格式

{
    "message": "操作成功",
    "status": 200,
    "token": null,
    "refreshToken": null,
    "data": [
        {
            "name": "管理后台",
            "id": 1,
            "childNode": [
                {
                    "name": "首页",
                    "id": 2
                },
                {
                    "name": "医院管理",
                    "id": 3
                },
                {
                    "name": "医生管理",
                    "id": 4,
                    "childNode": [
                        {
                            "name": "医生注册申请",
                            "id": 5
                        },
                        {
                            "name": "医生管理",
                            "id": 6
                        }
                    ]
                },
                {
                    "name": "系统管理",
                    "id": 7,
                    "childNode": [
                        {
                            "name": "用户管理",
                            "id": 8
                        },
                        {
                            "name": "角色权限管理",
                            "id": 9
                        },
                        {
                            "name": "假体类型配置",
                            "id": 10
                        },
                        {
                            "name": "平台配置",
                            "id": 11
                        },
                        {
                            "name": "系统公告",
                            "id": 12
                        },
                        {
                            "name": "系统日志",
                            "id": 13
                        }
                    ]
                },
                {
                    "name": "test",
                    "id": 21
                }
            ]
        },
        {
            "name": "2D规划",
            "id": 14
        },
        {
            "name": "3D规划",
            "id": 15,
            "childNode": [
                {
                    "name": "3D医生权限",
                    "id": 17
                },
                {
                    "name": "3D临床专员权限",
                    "id": 18
                },
                {
                    "name": "3D临床经理权限",
                    "id": 19
                }
            ]
        },
        {
            "name": "JCT定制",
            "id": 16
        }
    ]
}
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值