CodeZLei

  博客园 :: 首页 :: 博问 :: 闪存 :: :: 联系 :: 订阅 订阅 :: 管理 ::
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);
    }
}

 

posted on 2018-11-23 14:27  CodeZLei  阅读(163)  评论(0编辑  收藏  举报