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: ' ...
随机推荐
- web 自定义标签
Web Components 标准非常重要的一个特性是,它使开发者能够将HTML页面的功能封装为 custom elements(自定义标签).而自定义标签的好处,就是在大型web开发的时候,可以封装 ...
- python vtk 通过回调函数监测键盘”Up”键动作,每按一次方向上键,actor变换一种颜色
import vtk class KeyPressInteractorStyle(vtk.vtkInteractorStyleTrackballCamera): def __init__(self,p ...
- Java中返回类型方法名
继承父类,子类含有两个分别为boy.Girl类名. 返回是需要返回方法 则返回变量名Person class Person { void eat() {} void speak() {} } clas ...
- swift4.0 数据转模型
swift 4.0时代的到来,说明了swift已经趋于稳定了,已经完全可以入坑了. 下面就拿最简单的数据转模型来说说,实战一下. 接口使用: http://116.211.167.106/api/l ...
- redis命令List类型(六)
Arraylist和linkedlist的区别?? Arraylist是使用数组来存储数据,特点:查询快.增删慢 Linkedlist是使用双向链表存储数据,特点:增删快.查询慢,但是查询链表两端的数 ...
- [LeetCode&Python] Problem 704. Binary Search
Given a sorted (in ascending order) integer array nums of n elements and a target value, write a fun ...
- Unity UGUI Layout自动排版组件用法介绍
Unity UGUI布局组件 本文提供全流程,中文翻译. Chinar 坚持将简单的生活方式,带给世人!(拥有更好的阅读体验 -- 高分辨率用户请根据需求调整网页缩放比例) Chinar -- 心分享 ...
- Mac 10.13.6 安装 cocoapods
卸载pod sudo rm -fr ~/Library/Caches/CocoaPods/ sudo rm -fr ~/.cocoapods/repos/master/ sudo rm -fr Pod ...
- shell脚本-2
http://www.runoob.com/linux/linux-shell-variable.html 字符串可以用单引号,也可以用双引号,也可以不用引号.单双引号的区别跟PHP类似. 单引号字符 ...
- Mechanism:Limited Direct Execution
虚拟化机制的几大挑战:1.性能.在实现虚拟化的同时不增加系统过多开销.2.控制.高效运行程序的同时对CPU保持控制(对资源的管理). Limited direct execution:直接在CPU中运 ...