CodeZLei

  博客园 :: 首页 :: 博问 :: 闪存 :: :: 联系 :: 订阅 订阅 :: 管理 ::
  49 随笔 :: 0 文章 :: 3 评论 :: 14079 阅读
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
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   CodeZLei  阅读(169)  评论(0)    收藏  举报
编辑推荐:
· 独立开发,这条路可行吗?
· 我在厂里搞 wine 的日子
· 如何通过向量化技术比较两段文本是否相似?
· 35+程序员的转型之路:经济寒冬中的希望与策略
· JavaScript中如何遍历对象?
阅读排行:
· C#源生成器:让你的代码飞起来的黑科技
· JavaScript面试题,为什么[] + 0 = '0', 而{} + 0 = 0?
· 简单记录下最近2个月完成的线上系统迁移工作
· 推荐 5 款实用的 Docker 可视化管理工具,工作效率翻倍!
· 独立开发第二周:构建、执行、规划
点击右上角即可分享
微信分享提示