Java使用递归重装数据

该段代码主要展示了如何从数据库中查询角色菜单数据,并通过递归方式构造一个树形结构。首先,通过`selectMenuId`方法获取所有权限数据,然后调用`getSourc`方法进行数据的递归组装。在`getSourc`方法中,根据父ID判断层级,生成Map对象并填充菜单信息,同时递归获取子节点。最后,返回构建好的树结构数据。
摘要由CSDN通过智能技术生成
首先查询出所有数据集合:
 List<RoleMenu> roleMenusList = menuController.selectMenuId(username);
 List<Map<String, Object>> treeList = getSourc(roleMenusList,null);
递归重装数据:
//递归重装数据
    private List<Map<String, Object>> getSourc(List<RoleMenu> roleMenuList,Long parentId) {
        //定义返回的数据集结果集
        List<Map<String, Object>> listTree = new ArrayList<Map<String,Object>>();
        //遍历获取权限类的所有元素的对象
        for(int i = 0; i < roleMenuList.size(); i++){
            //定义map 用来存放组装的数据
            Map<String, Object> map = null;
            //获取单个菜单对象
            RoleMenu menu = roleMenuList.get(i);
            //如果当前的父id为空的话说明就是最高一级
            if(menu.getParentId()==parentId){
                //返回菜单结果集(根据menuId查询相应菜单)
                Menu menu1 = menuController.select(menu.getMenuId());
                //实例化map对象
                map = new HashMap<>();
                map.put("data",getSour(menu1));
                //添加子节点的父节点的id
                map.put("children",getSourc(roleMenuList,menu.getMenuId()));
            }
            //如果map集合不为空
            if(map !=null){
                //将没有子节点的数据删除 获取Map的子节点
                List<Map<String, Object>> list = (List<Map<String, Object>>) map.get("children");
                //将没有子节点的数据删除
                if(list.size() == 0){
                    map.remove("children");
                }
                listTree.add(map);
            }
        }
        return listTree;
    }

 private Map<String, Object> getSour(Menu menu) {
        Map map = new HashMap<>();
        map.put("id", menu.getId());
        map.put("name",menu.getName());
        map.put("path",menu.getPath());
        map.put("route",menu.getRoute());
        map.put("type",menu.getType());
        map.put("parentId",menu.getParentId());
        return map;
    }
返回树结构:

在这里插入图片描述

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值