package tree;
import java.util.List;
/**
*
* @author cenguocheng
* 137544496@qq.com
* 2018-7-24
*/
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 tree;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.alibaba.fastjson.JSON;
/**
*
* @author cenguocheng
* 137544496@qq.com
* 2018-7-24
*/
public class TestTree {
/**
* 初始化数据
* @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
*/
private static List<Menu> getChild(String id, List<Menu> rootMenu) {
// 子菜单
List<Menu> childList = new ArrayList<>();
for (Menu menu : rootMenu) {
// 遍历所有节点,将父菜单id与传过来的id比较
if (menu.getParentId().equals(id)) {
childList.add(menu);
}
}
// 把子菜单的子菜单再循环一遍
for (Menu menu : childList) {
menu.setChildMenus(getChild(menu.getId(), rootMenu));// 递归
}
// 判断递归结束
if (childList.size() == 0) {
return null;
}
return childList;
}
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
List<Menu> treeData = initData(); // 原始数据
// 查看结果
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).getParentId().equals("0")) {
menuList.add(treeData.get(i));
}
}
// 为一级菜单设置子菜单,getChild是递归调用的
for (Menu menu : menuList) {
menu.setChildMenus(getChild(menu.getId(), treeData));
}
Map<String,Object> jsonMap = new HashMap<String,Object>();
jsonMap.put("menu", menuList);
System.out.println(JSON.toJSONString(jsonMap));
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).getName()+"</cite>" +
"<i class='iconfont nav_right'>"+arr.get(i).getIcon()+"</i>" +
"</a>";
//存在子菜单 递归
if(arr.get(i).getChildMenus() != null && arr.get(i).getChildMenus().size() > 0){
str += "<ul>";
buildMenu(arr.get(i).getChildMenus()); // 递归
str += "</ul>";
}
str += "</li>";
}
return str;
}
}
运行结果:
{
"menu": [
{
"childMenus": [
{
"childMenus": [
{
"id": "4",
"name": "4",
"order": 0,
"parentId": "2"
},
{
"childMenus": [
{
"childMenus": [
{
"id": "9",
"name": "9",
"order": 0,
"parentId": "10"
}
],
"id": "10",
"name": "10",
"order": 0,
"parentId": "6"
}
],
"id": "6",
"name": "6",
"order": 0,
"parentId": "2"
},
{
"childMenus": [
{
"id": "11",
"name": "11",
"order": 0,
"parentId": "7"
}
],
"id": "7",
"name": "7",
"order": 0,
"parentId": "2"
}
],
"id": "2",
"name": "2",
"order": 0,
"parentId": "1"
},
{
"childMenus": [
{
"id": "8",
"name": "8",
"order": 0,
"parentId": "3"
}
],
"id": "3",
"name": "3",
"order": 0,
"parentId": "1"
}
],
"id": "1",
"name": "1",
"order": 0,
"parentId": "0"
},
{
"id": "5",
"name": "5",
"order": 0,
"parentId": "0"
}
]
}