java 對菜單父子關係 進行遍歷

話不多說 ,直接上代碼,其中代碼有參考網上其他 碼友 的,具體那個帖子記不清了 ,把代碼寫在這 做一個記錄

package cn.togeek.entity.tree;

import cn.togeek.entity.Permission;
import io.micrometer.core.instrument.util.StringUtils;

import java.util.ArrayList;
import java.util.List;

/**
 * @author liuhongchun
 * @date 2019/11/27 10:56
 */
public class TreePermission {
       //傳入數據源 
    public static List<Permission> getTree(List<Permission> list) {
        // 查看結果
        for (Permission menu : list) {
//            System.out.println(menu);
        }
        // 最後的結果
        List<Permission> menuList = new ArrayList<Permission>();
        // 先找到所有的一級菜單
        for (int i = 0; i < list.size(); i++) {
            // 一級菜單沒有parentId
            // 這裏 的 ParentId 是String 類型的 ,要是其類型的,記得轉換
            if (StringUtils.isBlank(list.get(i).getParentId())) {
                menuList.add(list.get(i));
            }
        }
        // 爲一級菜單設置子菜單,getChild是遞歸調用的
        for (Permission menu : menuList) {
              //這裏的PId 就是id,如果 你是id ,可以改爲id
            menu.setChilds(getChild(String.valueOf(menu.getPId()), list));
        }
        return menuList;
    }

    private static List<Permission>  getChild(String id, List<Permission> rootMenu) {
        // 子菜單
        List<Permission> childList = new ArrayList<>();
        for (Permission menu : rootMenu) {
            // 遍歷所有節點,將父菜單id與傳過來的id比較
             //parentid 爲string 類型
            if (StringUtils.isNotBlank(menu.getParentId())) {
                if (menu.getParentId().equals(id)) {
                    childList.add(menu);
                }
            }
        }
        // 把子菜單的子菜單再循環一遍
        for (Permission menu : childList) {// 沒有url子菜單還有子菜單
            if (StringUtils.isBlank(menu.getUrl())) {
                // 遞歸 PId=id
                menu.setChilds(getChild(String.valueOf(menu.getPId()), rootMenu));
            }
        } // 遞歸退出條件
        if (childList.size() == 0) {
            return null;
        }
        return childList;
    }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章