樹結構工具類(一)
阿新 • • 發佈:2020-07-14
選單Menu:
package com.jc.bean; import java.util.List; /** * 選單 * @author wang-xiaoming * */ public class Menu { // 選單id private String id; // 選單名稱 private String name; // 父選單id private String pId; // 選單url private String url; // 選單圖示 private String icon; // 選單順序 privateint order; // 子選單 private List<Menu> childMenus; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; }public String getpId() { return pId; } public void setpId(String pId) { this.pId = pId; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public String getIcon() { return icon; }public void setIcon(String icon) { this.icon = icon; } public int getOrder() { return order; } public void setOrder(int order) { this.order = order; } public List<Menu> getChildMenus() { return childMenus; } public void setChildMenus(List<Menu> childMenus) { this.childMenus = childMenus; } public Menu(String id, String name, String pId) { super(); this.id = id; this.name = name; this.pId = pId; } @Override public String toString() { return "Menu [id=" + id + ", name=" + name + ", pId=" + pId + ", url=" + url + ", icon=" + icon + ", order=" + order + ", childMenus=" + childMenus + "]"; } }
工具類MenuUtil:
package com.jc.util; import java.util.ArrayList; import java.util.List; import com.jc.bean.Menu; /** * 選單工具類 * @author wang-xiaoming * */ public class MenuUtil { // 私有構造 private MenuUtil() { } // 測試選單列表 private static List<Menu> list = new ArrayList<>(16); // 初始化 static { list.add(new Menu("1","勞務管理","0")); list.add(new Menu("2","裝置管理","0")); list.add(new Menu("3","物料管理","0")); list.add(new Menu("4","施工安全","0")); list.add(new Menu("5","施工質量","0")); list.add(new Menu("6","施工進度","0")); list.add(new Menu("7","技術難點","0")); list.add(new Menu("8","資料查詢","0")); list.add(new Menu("9","任務管理","0")); list.add(new Menu("10","物聯感控","0")); list.add(new Menu("11","考勤","1")); list.add(new Menu("12","專案部","1")); list.add(new Menu("13","勞務隊","1")); list.add(new Menu("14","勞務分析","1")); list.add(new Menu("15","工資結算","1")); list.add(new Menu("16","健康防控","1")); list.add(new Menu("17","教育培訓","1")); list.add(new Menu("18","當前位置","2")); list.add(new Menu("19","行駛軌跡","2")); list.add(new Menu("20","工作狀態","2")); list.add(new Menu("21","裝置總覽","2")); list.add(new Menu("22","裝置搜尋","2")); list.add(new Menu("23","原材資訊","3")); list.add(new Menu("24","地磅資料","3")); list.add(new Menu("25","出入庫","3")); list.add(new Menu("26","教育培訓","4")); list.add(new Menu("27","教育培訓","5")); list.add(new Menu("28","教育培訓","6")); list.add(new Menu("29","教育培訓","7")); list.add(new Menu("30","教育培訓","12")); } // 第二步:遞迴用到的獲取子級選單列表 public static List<Menu> getChild(String id, List<Menu> rootMenu){ List<Menu> childList = new ArrayList<>(16); // 為父選單尋找子選單列表,如果id=pId,則圈起來 for (Menu menu : rootMenu) { if(id.equals(menu.getpId())){ childList.add(menu); } } // 把子選單的子選單補充完整 for (Menu menu : childList) { menu.setChildMenus(getChild(menu.getId(), rootMenu)); } return childList; } // 第一步:獲取一級選單列表 public static List<Menu> getRootMenu(List<Menu> list){ List<Menu> menuList = new ArrayList<>(16); for (Menu menu : list) { if("0".equals(menu.getpId())){ menuList.add(menu); } } return menuList; } // 驗證 public static void main(String[] args) { System.out.println("---遞迴前---"); for (Menu menu : list) { System.out.println(menu); } // 收集所有一級選單 List<Menu> menuList = getRootMenu(list); // 為一級選單設定子選單 for (Menu menu : menuList) { menu.setChildMenus(getChild(menu.getId(), list)); } System.out.println("---遞迴後---"); for (Menu menu : menuList) { System.out.println(menu); } } }
結果參考:
參考連結:https://blog.csdn.net/qq_41570658/article/details/89384977