递归算法即案例

递归(recursion)程序调用自身的编程技巧

递归满足2个条件:

1. 有反复执行的过程(调用自身)
2. 有跳出反复执行过程的条件(递归出口)

项目中用到递归案例

  • 递归读取文件
  • 获取字典值(带层级关系)
  • 获取权限菜单(带层级关系)

示例 :获取权限菜单
菜单表结构
在这里插入图片描述
对应实体

public class Menus {
    @ApiModelProperty("菜单id 对应表的id")
    private String menuId;
    @ApiModelProperty("菜单名称 对应表的name")
    private String menuName;
    @ApiModelProperty("父id 对应表的parent_id")
    private String parentId;
    @ApiModelProperty("url 对应表的url")
    private String parentId;
    @ApiModelProperty("子菜单")
    private List<Menus> subMenu= Lists.newArrayList();
   //get set 需要 此处省略
}

处理代码

   @Override
    public List<Menus> getAllMenus() {
    	//获取所有的菜单
        List<Menus> list=userMapper.getAllMenus();
        List<Menus> menus=new ArrayList<>();
        for(Menus m:list){
            //找出父级别(最高层级)
            if("0".equals(m.getParentId())){
                //递归获取子集
                getChild(m,list);
                menus.add(m);
            }
        }
        return menus;
    }
    /*递归对子集处理*/
    private void getChild(Menus dictDTO, List<Menus> list) {
        List<Menus> children = dictDTO.getSubMenu();
        for (Menus dto : list) {//获取子集
            if (dto.getParentId().equals(dictDTO.getMenuId())) {
                children.add(dto);
            }
        }
        //if 判断即是递归出口
        if (!CollectionUtils.isEmpty(children)) {
            //获取子集的子集
            for (Menus child : children) {
                getChild(child, list);
            }
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值