package com.zl;
import java.util.ArrayList;
import java.util.List;
public class MenuItem {
private String id;
private String pid;
private String name;
private List<MenuItem> childMenuItemList;
public List<MenuItem> getChildMenuItemList() {
return childMenuItemList;
}
public void setChildMenuItemList(List<MenuItem> childMenuItemList) {
this.childMenuItemList = childMenuItemList;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPid() {
return pid;
}
public void setPid(String pid) {
this.pid = pid;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "MenuItem{" +
"id='" + id + '\'' +
", pid='" + pid + '\'' +
", name='" + name + '\'' +
", childMenuItemList=" + childMenuItemList +
'}';
}
}
package com.zl;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* Hello world!
*/
public class App {
/**
* 把 list 转化成 tree 的形式
* 核心是 对象都是引用的,对象间引用添加关联
* @param itemList
*/
public static Map<String, MenuItem> listToTree(List<MenuItem> itemList) {
//存放树结构的map,返回数据
HashMap<String, MenuItem> resultMap = new HashMap<>();
//map初始化 key为id,value为对象,方便根据id直接获取对象
HashMap<String, MenuItem> menuItemHashMap = new HashMap<>();
for (MenuItem menuItem : itemList) {
menuItemHashMap.put(menuItem.getId(), menuItem);
}
for (MenuItem menuItem : itemList) {
String pid = menuItem.getPid();
if (pid != null && pid != "") {
MenuItem parentMenuItem = menuItemHashMap.get(pid);
//有父节点的把当前节点挂在父节点上,没有父节点的说明当前节点就是根节点
if (null != parentMenuItem) {
List<MenuItem> childMenuItemList = parentMenuItem.getChildMenuItemList();
if (null != childMenuItemList) {
childMenuItemList.add(menuItem);
} else {
childMenuItemList = new ArrayList<>();
parentMenuItem.setChildMenuItemList(childMenuItemList);
childMenuItemList.add(menuItem);
}
}else {
//没有找到父节点说明当前节点是根节点,放到返回的map中
resultMap.put(menuItem.getId(),menuItem);
}
}else {
//没有找到父节点说明当前节点是根节点,放到返回的map中
resultMap.put(menuItem.getId(),menuItem);
}
}
System.out.println(resultMap);
return resultMap;
}
public static void main(String[] args) {
ArrayList<MenuItem> menuItemArrayList = new ArrayList<>();
MenuItem menuItem = new MenuItem();
MenuItem menuItem2 = new MenuItem();
MenuItem menuItem3 = new MenuItem();
MenuItem menuItem4 = new MenuItem();
MenuItem menuItem5 = new MenuItem();
MenuItem menuItem6 = new MenuItem();
MenuItem menuItem7 = new MenuItem();
MenuItem menuItem8 = new MenuItem();
menuItemArrayList.add(menuItem);
menuItemArrayList.add(menuItem2);
menuItemArrayList.add(menuItem3);
menuItemArrayList.add(menuItem4);
menuItemArrayList.add(menuItem5);
menuItemArrayList.add(menuItem6);
menuItemArrayList.add(menuItem7);
menuItemArrayList.add(menuItem8);
menuItem.setId("1");
menuItem.setPid("0");
menuItem.setName("1");
menuItem2.setId("2");
menuItem2.setPid("0");
menuItem2.setName("2");
menuItem3.setId("3");
menuItem3.setPid("2");
menuItem3.setName("2.1");
menuItem4.setId("4");
menuItem4.setPid("0");
menuItem4.setName("4");
menuItem5.setId("5");
menuItem5.setPid("4");
menuItem5.setName("4.1");
menuItem6.setId("6");
menuItem6.setPid("5");
menuItem6.setName("4.1.1");
menuItem7.setId("7");
menuItem7.setPid("6");
menuItem7.setName("4.1.1.1");
menuItem8.setId("8");
menuItem8.setPid("6");
menuItem8.setName("4.1.1.2");
listToTree(menuItemArrayList);
}
}