話不多說 ,直接上代碼,其中代碼有參考網上其他 碼友 的,具體那個帖子記不清了 ,把代碼寫在這 做一個記錄 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; } }
java 對菜單父子關係 進行遍歷
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.