实体类:
package tree; import java.util.List; /** * * 2018-11-30 */ public class Menu { // 菜单id private String id; // 菜单名称 private String name; // 父菜单id private String parentId; // 菜单url private String url; // 菜单图标 private String icon; // 菜单顺序 private int order; // 子菜单 private List<Menu> childMenus; public Menu(String id, String name, String parentId) { super(); this.id = id; this.name = name; this.parentId = parentId; } @Override public String toString() { return "Menu [id=" + id + ", name=" + name + ", parentId=" + parentId + ", url=" + url + ", icon=" + icon + ", order=" + order + ", childMenus=" + 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 getParentId() { return parentId; } public void setParentId(String parentId) { this.parentId = parentId; } 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; } }
以下为工具类:
package com.aqueduct.base.common.util;
import java.util.ArrayList; import java.util.HashMap; import
java.util.List; import java.util.Map;
import javax.annotation.Resource;
import com.alibaba.fastjson.JSON; import
com.aqueduct.base.entity.system.Menu; import
com.aqueduct.base.service.system.menu.MenuManager;
public class ZTreeInit{ @Resource(name="menuService") private static MenuManager menuService;
/** * 初始化数据 * * @return */
public static List<Menu> initData(){ List<Menu> treeData = new ArrayList<Menu>(); treeData.add(new Menu("1","1","0")); treeData.add(new Menu("2","2","1")); treeData.add(new Menu("3","3","1")); treeData.add(new Menu("4","4","2")); treeData.add(new Menu("5","5","0")); treeData.add(new Menu("6","6","2")); treeData.add(new Menu("7","7","2")); treeData.add(new Menu("8","8","3")); treeData.add(new Menu("9","9","10")); treeData.add(new Menu("10","10","6")); treeData.add(new Menu("11","11","7")); return treeData; }
/** * 子菜单递归 * * @param id * @param rootMenu * @return */
public static List<Menu> getChild(String id, List<Menu> rootMenu) { // 子菜单 List<Menu> childList = new ArrayList<>(); for (Menu menu : rootMenu) { // 遍历所有节点,将父菜单id与传过来的id比较 if (menu.getPARENT_ID().equals(id)) { childList.add(menu); } } // 把子菜单的子菜单再循环一遍 for (Menu menu : childList) { menu.setSubMenu(getChild(menu.getMENU_ID(), rootMenu));// 递归 } // 判断递归结束 if (childList.size() == 0) { return null; } return childList; }
/** * @param args * @throws Exception */
public static void main(String[] args) throws Exception { // TODO Auto-generated method stub List<Menu> treeData = menuService.listAllMenuQx("0");//获取所有菜单; // 原始数据 // 查看结果 for (Menu menu : treeData) { // System.out.println(menu.toString()); } List<Menu> menuList = new ArrayList<Menu>(); // 树递归 // 先找到所有的一级菜单 for (int i = 0; i < treeData.size(); i++) { // 一级菜单父ID为0 if (treeData.get(i).getPARENT_ID().equals("0")) { menuList.add(treeData.get(i)); } } // 为一级菜单设置子菜单,getChild是递归调用的 for (Menu menu : menuList) { menu.setSubMenu(getChild(menu.getMENU_ID(), treeData)); } Map<String, Object> jsonMap = new HashMap<String, Object>(); jsonMap.put("menu", menuList); System.out.println(JSON.toJSONString(menuList)); // buildMenu(menuList); // System.out.println(str); }
/** * 遍历菜单 * * @param arr * @return */
public static String str = ""; public static String buildMenu(List<Menu> arr) { for (int i = 0; i < arr.size(); i++) { /*str += "<li>"; str += "<a href='javascript:;'>" + "<cite>" + arr.get(i).getMENU_NAME() + "</cite>" + "<i class='iconfont nav_right'>" + arr.get(i).getMENU_ICON() + "</i>" + "</a>";*/ // 存在子菜单 递归 if (arr.get(i).getSubMenu() != null && arr.get(i).getSubMenu().size() > 0) { // str += "<ul>"; buildMenu(arr.get(i).getSubMenu()); // 递归 // str += "</ul>"; } /*str += "</li>";*/ } return str; } }
数据输出: