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);
}
}
list 转成 tree的更多相关文章
- PHP 把返回的数据集转换成Tree树
/** * 把返回的数据集转换成Tree * @access public * @param array $list 要转换的数据集 * @param string $pid parent标记字段 * ...
- 将list转成tree
using System;using System.Collections.Generic;using System.Linq; namespace Infrastructure{ /// <s ...
- js 一维数组转成tree 对象
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title> ...
- easyUi中的一段漂亮代码之将list转换成tree.
function convert(rows){ function exists(rows, parentId){ for(var i=0; i<rows.length; i++){ if (ro ...
- 【技术宅6】把一个无限级分类循环成tree结构
function list_to_tree($list,$root=0,$pk='cid',$pid = 'pid',$child = '_child'){ if(is_array($list)) { ...
- java的List列表转成Tree(树形)结构列表
直接看借鉴博客:https://blog.csdn.net/massivestars/article/details/53911620/ 由于我的业务没有父子级id两个字段,只有一个层级id字段来分层 ...
- JS将扁平化的数据处理成Tree结构
let jsonData= [ { id:1, parentId:0, name:"一级菜单A" }, { id:2, parentId:0, name:"一级菜单B& ...
- 基于List数组转换成tree对象
package com.shjysoft.yunxi.sync.webservice; import java.util.ArrayList;import java.util.Date;import ...
- jquery easyui tree动态加载子节点
1.前端tree绑定时,使用onBeforeExpand事件:当节点展开时触发加载子节点,自动会向服务端发送请求:url为绑定url,参数为当前节点id this.tree = { method: ' ...
随机推荐
- String Method的字符串变换的一个例子
<!DOCTYPE html> <html lang="en"><head> <meta charset="UTF-8" ...
- C语言---指针变量作为函数参数
在C语言中,函数的参数不仅可以是整数.小数.字符等具体的数据,还可以是指向它们的指针.用指针变量作函数参数可以将函数外部的地址传递到函数内部,使得在函数内部可以操作函数外部的数据,并且这些数据不会随着 ...
- django + 阿里云云服务器网站搭建
最近自己用django搭了一个小网站,个人的项目挂在了github上 https://github.com/LOMOoO/tpure 预计是挂在阿里云的云服务器上运行,云服务器买好了,阿里云的域名也买 ...
- tomcat下服务启动失败原因
Tomcat启动成功,输入网址后可以显示小黄猫界面,但是在Tomcat下的服务却启动不成功,显示404(以Jenkins为例,运用多种方式查看原因) 注:1.单启动Tomcat服务是可以启动成功的. ...
- Redis的主从复制(十一)
1>什么是主从复制 持久化保证了即使redis服务重启也不会丢失数据,因为redis服务重启后(在使用aof和rdb方式时,如果redis重启,则数据从aof文件加载)会将硬盘上持久化的数据恢复 ...
- 删除log文件末尾中指定的行数
/// <summary> /// 删除log文件末尾中指定的行数 /// </summary> /// <param name ...
- silverlight 控件样式动态绑定
<telerik:RadDiagram x:Name="diagram1" GraphSource="{Binding GraphSource, Mode=TwoW ...
- lua中查询表元素规则(__index)解析
阅读文章后用一个流程图来总结__index的规则用法 总结一下Lua查找一个表元素时的规则,其实就是如下3个步骤: 1.在表中查找,如果找到,返回该元素,找不到则继续 2.判断该表是否有元表,如果没有 ...
- ArcGIS中的坐标系:基本概念和常用操作(一)
本文呢是主要是借鉴李郎平李大大的博士论文和百度百科,里面还有一点点我自己的理解,希望能帮助自己加深对于坐标系的认识. 李大大的博客:http://blog.sciencenet.cn/u/Brume ...
- linux 在后台常驻运行php脚本
php a.php &