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. https加密流程

     引用其它博主博客,在这里谢谢这位博主,原博客地址:https://blog.csdn.net/xincai/article/details/51954468 1,下面,用一幅图展示一下https建立 ...

  2. 原生JS和jQuery操作DOM的区别小结

    一.Js原生对象和jQuery实例对象的相互转化: (1).原生JS对象转JQ对象: $(DOM对象); (2). JQ对象转原生JS对象: $(DOM对象).get(index); //注意区分eq ...

  3. 蓝牙协议分析(12)_LQ和RSSI的原理及应用场景

    在蓝牙协议栈的物理层,有这样两个比较有用的参数:LQI和RSSI.它们都是通过接收端,判断当前无线环境的质量(链路质量),以指导后续的动作.但这两个数值的计算原理和使用场景又有很大的差别. LQI ( ...

  4. redis持久化方案(十)

    方案分为两种方式: 1>Rdb方式 介绍:redis默认的方式,redis通过快照来将数据持久化到磁盘中 a.设置持久化快照的条件 在redis.conf中修改持久化快照的条件,如下: 比如:如 ...

  5. Linux常用命令练习

    实验结论 熟悉命令倒不是什么难的过程,很容易就能跟着指示打出来并明白其效果与作用.难就难在了感受不到这些命令的实际意义,即如何有效的结合起来并在项目中运用,这就导致了很大的迷茫与无力感. cat fi ...

  6. Js/如何修改easyui修饰的input的val值

    1.关于js对input值的修改介绍:一般js改变input的val值,我一直使用的方法是: $('#id').val('test');这样的方式来进行修改.但是我使 用了class="ea ...

  7. Altium Designer 10如何导出SMT加工信息和BOM元件清单

    要委托工厂进行SMT加工,需要向工厂提供表贴元器件的位置信息(Pick Place),这些信息可以由csv保存下来. 步骤如下: 一.设定坐标原点,一般设为板子左下角,在Keepout划线的顶点处. ...

  8. vue使用vue-video-player在直播中的应用

    文档地址:https://github.com/savokiss/vue-videojs-demo live demo地址:https://github.com/savokiss/vue-videoj ...

  9. jmeter使用手册

    1.在bin文件中找到jmeter.bat文件启动 2.创建测试计划-填写计划名称 3.添加线程组(右键点击) 4.设置线程-红框内均可设置,线程数-并发次数 5.在线程组下添加http请求 6.在h ...

  10. Vue基础之数据绑定

    我们学习一门新语言或者框架时,第一件事是什么呢,那必然是向世界say Hello. 创建一个Vue应用 话不多说,先上代码,让我们感受一下Vue的核心功能 <!DOCTYPE html> ...