java递归把列表转为菜单树

菜单实体类

package com.utils.menu;import java.util.List;public class Menu {private String name;private String icon;private String id;private String isLeaf; //1:目录      0:叶子private String parentId;private List<Menu> children;public String getName() {return name;}public void setName(String name) {this.name = name;}public String getIcon() {return icon;}public void setIcon(String icon) {this.icon = icon;}public String getId() {return id;}public void setId(String id) {this.id = id;}public String getIsLeaf() {return isLeaf;}public void setIsLeaf(String isLeaf) {this.isLeaf = isLeaf;}public String getParentId() {return parentId;}public void setParentId(String parentId) {this.parentId = parentId;}public List<Menu> getChildren() {return children;}public void setChildren(List<Menu> children) {this.children = children;}@Overridepublic String toString() {return "Menu [name=" + name + ", icon=" + icon + ", id=" + id + ", isLeaf=" + isLeaf + ", parentId=" + parentId+ ", children=" + children + "]";}}

菜单树工具类

package com.utils.menu;import java.util.ArrayList;
import java.util.List;/*** 菜单树工具类*项目名称:text   * 类名称:MenuTreeUtil   * 类描述:   把菜单列表转换为树形结构* @version*/
public class MenuTreeUtil {/*** 递归给父节点找孩子节点* @param list 目录list* @param root 父节点id* @return 该父节点id下的所有子节点list集合*/public List<Menu> findChildren(List<Menu> list,String root){List<Menu> children = new ArrayList<Menu>();//1、遍历list,给root找孩子for(Menu menu : list) {//2、判断父节点是否为rootif(root.equals(menu.getParentId())) {children.add(menu);}}//3、遍历孩子节点list,判断子节点是否有目录节点,有则需要递归找孩子for(Menu menu : children) {//4、判断是否为目录,是则递归,给该节点找孩子if("1".equals(menu.getIsLeaf())) {menu.setChildren(findChildren(list,menu.getId()));}}return children;}
}

调用

package com.utils.menu;import java.util.List;import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;public class MenuTreeTest {public static void main(String[] args) {String menuListStr = "[{\"id\":1,\"name\":\"一级菜单\",\"icon\":\"icon1\",\"parentId\":\"0\",\"isLeaf\":\"1\"},{\"id\":2,\"name\":\"二级菜单\",\"icon\":\"icon1\",\"parentId\":\"0\",\"isLeaf\":\"1\"},{\"id\":3,\"name\":\"三级菜单\",\"icon\":\"icon1\",\"parentId\":\"0\",\"isLeaf\":\"1\"},{\"id\":4,\"name\":\"四级菜单\",\"icon\":\"icon1\",\"parentId\":\"0\",\"isLeaf\":\"1\"},{\"id\":5,\"name\":\"一级子菜单\",\"icon\":\"icon1\",\"parentId\":\"1\",\"isLeaf\":\"0\"},{\"id\":6,\"name\":\"一级子菜单\",\"icon\":\"icon1\",\"parentId\":\"1\",\"isLeaf\":\"1\"},{\"id\":7,\"name\":\"二级子菜单\",\"icon\":\"icon1\",\"parentId\":\"2\",\"isLeaf\":\"0\"},{\"id\":8,\"name\":\"三级子菜单\",\"icon\":\"icon1\",\"parentId\":\"3\",\"isLeaf\":\"0\"},{\"id\":9,\"name\":\"一级孙子菜单\",\"icon\":\"icon1\",\"parentId\":\"6\",\"isLeaf\":\"0\"}]";System.out.println(menuListStr.replace("\\", ""));List<Menu> list = JSONArray.parseArray(menuListStr, Menu.class);MenuTreeUtil menuTeeeUtil = new MenuTreeUtil();List<Menu> result = menuTeeeUtil.findChildren(list,"0");System.out.println(result);String resultStr = JSON.toJSONString(result);System.out.println(resultStr);}
}

待转的list集合 json格式

[{"id": 1,"name": "一级菜单","icon": "icon1","parentId": "0","isLeaf": "1"},{"id": 2,"name": "二级菜单","icon": "icon1","parentId": "0","isLeaf": "1"},{"id": 3,"name": "三级菜单","icon": "icon1","parentId": "0","isLeaf": "1"},{"id": 4,"name": "四级菜单","icon": "icon1","parentId": "0","isLeaf": "1"},{"id": 5,"name": "一级子菜单","icon": "icon1","parentId": "1","isLeaf": "0"},{"id": 6,"name": "一级子菜单","icon": "icon1","parentId": "1","isLeaf": "1"},{"id": 7,"name": "二级子菜单","icon": "icon1","parentId": "2","isLeaf": "0"},{"id": 8,"name": "三级子菜单","icon": "icon1","parentId": "3","isLeaf": "0"},{"id": 9,"name": "一级孙子菜单","icon": "icon1","parentId": "6","isLeaf": "0"}
]

转化过的树形list json格式

[{"children": [{"icon": "icon1","id": "5","isLeaf": "0","name": "一级子菜单","parentId": "1"},{"children": [{"icon": "icon1","id": "9","isLeaf": "0","name": "一级孙子菜单","parentId": "6"}],"icon": "icon1","id": "6","isLeaf": "1","name": "一级子菜单","parentId": "1"}],"icon": "icon1","id": "1","isLeaf": "1","name": "一级菜单","parentId": "0"},{"children": [{"icon": "icon1","id": "7","isLeaf": "0","name": "二级子菜单","parentId": "2"}],"icon": "icon1","id": "2","isLeaf": "1","name": "二级菜单","parentId": "0"},{"children": [{"icon": "icon1","id": "8","isLeaf": "0","name": "三级子菜单","parentId": "3"}],"icon": "icon1","id": "3","isLeaf": "1","name": "三级菜单","parentId": "0"},{"children": [],"icon": "icon1","id": "4","isLeaf": "1","name": "四级菜单","parentId": "0"}
]

java递归把list菜单列表转为菜单树相关推荐

  1. 根据用户id查询菜单列表(菜单权限问题)

    根据用户id查询菜单列表(菜单权限问题): 最高级用户菜单效果图: 较低级别用户菜单效果图: SQL语句分析图: 根据用户id查询对应菜单(权限)SQL语句: SELECT * FROM user_r ...

  2. java递归生成树结构_突破CRUD | 万能树Java工具类封装(源码)

    0.学完本文你或许可以收获 感受一个树工具从初始逐步优化完善的过程 树工具封装的设计思考与实现思路 最后收获一款拿来即用的树工具源代码 对于前端树组件有一定了解和使用过的同学可直接跳跃到第3章节开始. ...

  3. java递归实现多级菜单栏_vue+ java 实现多级菜单递归效果

    效果如图: 大概思路:树形视图使用的是vue官方事例代码,java负责封装数据,按照vue官方事例的数据结构封装数据即可.有两个需要关注的点: 1.官方事例的数据结构是一个对象里面包含着集合,而不是一 ...

  4. java递归实现多级菜单栏_Java构建树形菜单以及支持多级菜单的实例代码

    这篇文章主要介绍了Java构建树形菜单的实例代码(支持多级菜单),非常不错,具有参考借鉴价值,需要的朋友可以参考下 效果图:支持多级菜单. 菜单实体类: public class Menu { // ...

  5. Java递归实现多级菜单

    数据库设计 我们在设计数据库的时候仅仅使用一张表就可以把上面的关系给捋清楚,就是通过一个parentid字段,让我们开看一下这张表的表结构 看一下建表语句 DROP TABLE IF EXISTS m ...

  6. java实现多级菜单(java递归)方法一

    查询菜单树 public List<Map<String, Object>> queryCategoryInfo() {List<Map<String, Objec ...

  7. java多级菜单列表怎么做_JAVA构造多级菜单

    很多时候我们在前段展现时要用到多级菜单,刚好今天做了个简单的,整理一下: 首先我们要确定要展现的菜单结构: --根菜单 --一级菜单A --二级菜单A --三级菜单A --一级菜单B 与Hiberna ...

  8. java构建树形菜单(多级菜单)

    一.树形结构简介 首先构建树形结构,我们得知道什么是树形结构,如下图所示. 如上图所示,可以看出有四级菜单,这就是树形结构. 如果想更深入的了解树形结构,建议去查询数据结构中关于树的章节. 二.树形菜 ...

  9. java实现一、二、三级菜单查询设置

    目录 数据库设计 查询菜单的时候,我们可能会想直接从数据库中查询出菜单,但是像京东的首页菜单是这样的: 数据库设计 我们在设计数据库的时候仅仅使用一张表就可以把上面的关系给捋清楚,就是通过一个pare ...

最新文章

  1. 农业银行联行号怎么查询_农行信用卡解析丨菜卡怎么提额8W?学会一招就够了!...
  2. 图像坐标:我想和世界坐标谈谈(B)
  3. 本地开发时连接后台数据库时出现的错误,附自救方法
  4. 深入体验JavaWeb开发内幕——简述JSP中的自定义标签叫你快速学会
  5. python中使用Django对url路径进行处理
  6. 国家一级计算机考试模拟题2012版,2012年计算机等级考试一级上机Word模拟题2
  7. 8599元起!三星Galaxy Z Fold3/Flip3 5G折叠手机国行即将发货
  8. Spark Yarn Client模式spark.driver.host导致 Cannot assign requested address: Service ‘sparkDriver‘ failed
  9. Luogu4725 【模板】多项式对数函数(NTT+多项式求逆)
  10. SQL Server 2008入门系列之设置数据库服务器的访问权限
  11. Lattice - 规划模块 1.采样轨迹 2.计算轨迹cost 3 循环检测筛选轨迹
  12. java万年历JFrame_Java Gui万年历
  13. 刘强东的自白:我为啥要和苏宁打价格战?
  14. 微信网页开发(3)--微信网页授权
  15. Win10小键盘不能使用的解决办法
  16. 图像的均值、均方值、方差、均方差、标准差
  17. CTF-Crypto学习1(软件加壳、反汇编、Babe64、Rijndael密码算法)
  18. 海信在CES宣布推出75英寸到100英寸的全系全色激光电视产品
  19. rl滤波器原理_入门篇,层层讲解滤波电路工作原理
  20. 如何保证电脑硬盘格式化后数据不能被恢复?

热门文章

  1. java团队管理_团队管理的“五大核心要素”
  2. 在Android Studio 上为项目添加Git版本控制
  3. unity获取麦克风音量_Unity获取麦克风音量(实现音效波浪效果)
  4. MySQL 8——学习笔记03(插入、更新、删除 数据 [DML语句]、查询数据 [DQL语句])
  5. Generalized Function Pointers
  6. 硬盘快满了,怎么办?查找重复文件
  7. 干货秘籍:网易游戏《率土之滨》原画设计师分享创作设计经验
  8. 青龙 金手指教程每天低保保姆安装教程
  9. 墨天轮沙龙 | 庚顿数据姚羽:实时数据技术赋能流程工业,保障业务连续性
  10. Sql server中 如何用sql语句创建视图 及 视图的作用