记录一下递归算法的简单应用

多级菜单查询用递归算法
1.递归算法的关键在于找到顶层的入口
2.再向下查找,将一级菜单于二级菜单的从属id相比较,循环嵌套
表在这里插入图片描述
主要实体类中有两个特殊的属性
在这里插入图片描述
一级菜单level值为1,向后类推
其中用到了MyBatisPlus
表结构pid为菜单的父菜单,pid为0的为顶层菜单。
1.多层菜单查询首先找到pid为0的顶层菜单进入

public List<Permission> queryAllMenu() {
    
    
	//查询所有菜单的数据
	List<Permission> permissionList = baseMapper.selectList(new QueryWrapper<Permission>().orderByDesc("id"))l
	//把所有菜单按照要求进行封装
	List<Permission> resultList = buildPermission(permissionList);
	return resultList;
}

public static List<Permission> buildPermisstion(List<Permission> permissionList) ){
    
    
	List<Permission> findList = new ArrayList<>();
	for(Permission permissionNode : permissionList){
    
    
		 //得到顶层菜单 pid=0菜单
            if("0".equals(permissionNode.getPid())) {
    
    
                //设置顶层菜单的level是1
                permissionNode.setLevel(1);
                //根据顶层菜单,向里面进行查询子菜单,封装到finalNode里面
                finalList.add(selectChildren(permissionNode,permissionList));}
	}
	return finalList
}

2.接下来才是真正的递归算法

 private static Permission selectChildren(Permission permissionNode, List<Permission> permissionList) {
    
    
 	//因为要向一层菜单里方二层,所以先将对象初始化
 	permissionNode.setChildren(new ArayList<Permission>());
 	for(Permission it:permissionList){
    
    
 	//判断二值是否相等,相等则为父子菜单	
 	if(permissionNode.getId.equal(permissionList.getPid)){
    
    
 		//将父菜单的level加1赋值给子菜单
 		int level = permissionNode.getLevel()+1;
 		it.setLevel(level);
 		   //如果children为空,进行初始化操作
                if(permissionNode.getChildren() == null) {
    
    
                    permissionNode.setChildren(new ArrayList<Permission>());
                }
                //把查询出来的子菜单放到父菜单里面
                permissionNode.getChildren().add(selectChildren(it,permissionList));
            }
        }
        return permissionNode;
 	}
 }

猜你喜欢

转载自blog.csdn.net/y1639013776/article/details/110439693