個人記錄遞歸查詢菜單欄,多級別返回。

原文參考地址:https://blog.csdn.net/yf_mood/article/details/88594448

在菜單欄的多級別顯示時,需要用到遞歸查詢,這裏參考了其他博主的文章,在此感謝。

   /**
     * 第一步。
     * 查詢資源權限的子權限
     * @param id 
     * @param root
     * @return ResponseMenuModel 爲自己封裝的返回實體類
     */
    private List<ResponseMenuModel> getChild(String id,List<ResponseMenuModel> root){
        //子菜單
        List<ResponseMenuModel> childList=new ArrayList<>();
        for (ResponseMenuModel sysPermissionVo : root) {
            // 遍歷所有節點,將父菜單id與傳過來的id比較
            if(!sysPermissionVo.getSysMenuId().equals("0")){
                if(sysPermissionVo.getParentId().equals(id)){
                    childList.add(sysPermissionVo);
                }
            }
        }
        //遞歸終止的條件,沒有子權限時
        if (childList.size()==0){
            return null;
        }
        // 如果有子菜單還有子菜單,把子菜單的子菜單再循環一遍
        for (ResponseMenuModel sysPermissionVo : childList) {
            sysPermissionVo.setChildren(getChild(sysPermissionVo.getSysMenuId(),root));
        }
        return childList;
    }
   /**
     * 第二步
     * 初始化資源權限樹形結構(查找所有資源權限)
     * @return ResponseMenuModel 爲自己封裝的實體類
     */
    private List<ResponseMenuModel> innitPermissions(List<ResponseMenuModel> allpermissions) {
        List<ResponseMenuModel> root=new ArrayList<>();
        for (ResponseMenuModel allpermission : allpermissions) {
            ResponseMenuModel sysPermissionVo = new ResponseMenuModel();
            BeanUtils.copyProperties(allpermission,sysPermissionVo);
            root.add(sysPermissionVo);
        }
        List<ResponseMenuModel> finalList=new ArrayList<>();
        //先找到所有的一級菜單
        for (ResponseMenuModel sysPermission : root) {
            //一級菜單父id爲0
            if(sysPermission.getParentId().equals("0")){
                finalList.add(sysPermission);
            }
        }
        // 爲一級菜單設置子菜單,getChild是遞歸調用的
        for (ResponseMenuModel sysPermission : finalList) {
            sysPermission.setChildren(getChild(sysPermission.getSysMenuId(),root));
        }
        return finalList;
    }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章