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

list 转成 tree的更多相关文章

  1. PHP 把返回的数据集转换成Tree树

    /** * 把返回的数据集转换成Tree * @access public * @param array $list 要转换的数据集 * @param string $pid parent标记字段 * ...

  2. 将list转成tree

    using System;using System.Collections.Generic;using System.Linq; namespace Infrastructure{ /// <s ...

  3. js 一维数组转成tree 对象

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...

  4. easyUi中的一段漂亮代码之将list转换成tree.

    function convert(rows){ function exists(rows, parentId){ for(var i=0; i<rows.length; i++){ if (ro ...

  5. 【技术宅6】把一个无限级分类循环成tree结构

    function list_to_tree($list,$root=0,$pk='cid',$pid = 'pid',$child = '_child'){ if(is_array($list)) { ...

  6. java的List列表转成Tree(树形)结构列表

    直接看借鉴博客:https://blog.csdn.net/massivestars/article/details/53911620/ 由于我的业务没有父子级id两个字段,只有一个层级id字段来分层 ...

  7. JS将扁平化的数据处理成Tree结构

    let jsonData= [ { id:1,  parentId:0, name:"一级菜单A" }, { id:2, parentId:0, name:"一级菜单B& ...

  8. 基于List数组转换成tree对象

    package com.shjysoft.yunxi.sync.webservice; import java.util.ArrayList;import java.util.Date;import ...

  9. jquery easyui tree动态加载子节点

    1.前端tree绑定时,使用onBeforeExpand事件:当节点展开时触发加载子节点,自动会向服务端发送请求:url为绑定url,参数为当前节点id this.tree = { method: ' ...

随机推荐

  1. .net下的缓存技术

    1.为什么要缓存?缓存能解决的问题 1.1稳定性 同一个应用中,对同一数据.逻辑功能和用户界面的多次请求时经常发生的.当用户基数很大时,如果每次请求都进行处理,消耗的资源是很大的浪费,也同时造成系统的 ...

  2. linux 计划任务 访问某个URL

    1.进入crontab文件的编写状态: crontab -e 2.进入编辑器后,按下 “ i ” 键,进入编辑模式,在编辑模式下,我们写上我们这次需要访问执行的脚本: 59 23 * * * /usr ...

  3. python学习第五次笔记

    python学习第五次笔记 列表的缺点 1.列表可以存储大量的数据类型,但是如果数据量大的话,他的查询速度比较慢. 2.列表只能按照顺序存储,数据与数据之间关联性不强 数据类型划分 数据类型:可变数据 ...

  4. crontab定时执行shell脚本失败的原因

    有一段时间不用crontab定时执行任务了,这次趁着项目实施的机会来进一步分析一下crontab定时任务设置时遇到的一些棘手的问题. crontab -l 查看目前已经设置的crontab信息 cro ...

  5. 使用vue-cli搭建项目

    在使用vue-cli搭建项目前提: 1.node.js环境 2.npm镜像 开始. 1.cmd打开命令行, npm install -g vue-cli 进行全局安装  (vue-V可以查看其版本) ...

  6. Tecplot: Legend和图像中 Dashed/Dash dot/Long dash 等虚线显示没有区别的问题

    问题描述:如下图1中线型明明选择的不同,但是tecplot里显示的图像和legend里显示的线型没有区别,应该是bug. tecplot 版本:360EX  2017R2 解决办法:把Pattern ...

  7. WEBBASE篇: 第十篇, JavaScript知识5

    JavaScript知识5 <!doctype html> <html lang="en"> <head> <meta charset=& ...

  8. md5Util

    package com.rscode.credits.util; /** * MD5加密类 * @author 12 */ import java.security.MessageDigest; pu ...

  9. Mysql存储

    BEGIN # 统计视频使用的模板数 UPDATE VideoTemplate vt INNER JOIN ( SELECT TemplateId, COUNT(TemplateId) AS Tota ...

  10. Python练习十

    1.生成随机整数,从1-5取出来然后输入一个数字,来猜,如果大于,则打印bigger小了,则打印less如果相等,则打印equal. import random num1 = random.randi ...