1. 程式人生 > >list 轉成 tree

list 轉成 tree

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); } }