1、实现效果:

2、实现思路:

递归生成思路,编写两个类: 数据模型Menu、和 创建树形的MenuTree。通过以下过程实现:

1.首先从菜单数据中获取所有根节点。
2.为根节点建立次级子树并拼接上。
3.递归为子节点建立次级子树并接上,直至为末端节点拼接上空的“树”。

3、实现代码

1、首先,编写数据模型Menu。每条菜单有自己的menuId、父节点parentId、菜单名称menuDescribe、菜单还拥有次级菜单children。

 * @Author dw* @ClassName Menu* @Description* @Date 2021/11/30 17:35* @Version 1.0*/
@Data
public class Menu {private String menuId;private String parentId;private String menuDescribe;private String url;private List<Menu> children;public Menu(String menuId, String parentId, String menuDescribe, String url) {this.menuId = menuId;this.parentId = parentId;this.menuDescribe = menuDescribe;this.url = url;}/*省略get\set*/
}

2、创建树形结构的类MenuTree。方法getRootNode获取所有根节点,方法buildTree将根节点汇总创建树形结构,buildChildTree为节点建立次级树并拼接上当前树,递归调用buildChildTree不断为当前树开枝散叶直至找不到新的子树。完成递归,获取树形结构。

/*** @Author dw* @ClassName MenuTree* @Description* @Date 2021/11/30 17:54* @Version 1.0*/
public class MenuTree {/*** 所有的菜单数据*/private List<Menu> menuList = new ArrayList<Menu>();public MenuTree(List<Menu> menuList) {this.menuList = menuList;}/*** 建立树形结构** @return*/public List<Menu> buildTree() {List<Menu> treeMenus = new ArrayList<Menu>();for (Menu menuNode : getRootNode()) {menuNode = buildChildTree(menuNode);treeMenus.add(menuNode);}return treeMenus;}/*** 递归,建立子树形结构** @param pNode* @return*/private Menu buildChildTree(Menu pNode) {List<Menu> childMenus = new ArrayList<Menu>();for (Menu menuNode : menuList) {if (menuNode.getParentId().equals(pNode.getMenuId())) {childMenus.add(buildChildTree(menuNode));}}pNode.setChildren(childMenus);return pNode;}/*** 获取根节点** @return*/private List<Menu> getRootNode() {List<Menu> rootMenuLists = new ArrayList<Menu>();for (Menu menuNode : menuList) {if (menuNode.getParentId().equals("0")) {rootMenuLists.add(menuNode);}}return rootMenuLists;}
}

3、最后,插入一些数据试试效果。得到的json就可以生成图一菜单了。

public static void main(String[] args) {List<Menu> menuList= new ArrayList<Menu>();/*插入一些数据*/menuList.add(new Menu("GN001D000","0","系统管理","/admin"));menuList.add(new Menu("GN001D100","GN001D000","权限管理","/admin"));menuList.add(new Menu("GN001D110","GN001D100","密码修改","/admin"));menuList.add(new Menu("GN001D120","GN001D100","新加用户","/admin"));menuList.add(new Menu("GN001D200","GN001D000","系统监控","/admin"));menuList.add(new Menu("GN001D210","GN001D200","在线用户","/admin"));menuList.add(new Menu("GN002D000","0","订阅区","/admin"));menuList.add(new Menu("GN003D000","0","未知领域","/admin"));/*让我们创建树*/MenuTree menuTree =new MenuTree(menuList);menuList=menuTree.buildTree();/*转为json看看效果*/String jsonOutput = JSONUtil.toJsonStr(menuList);System.out.println(jsonOutput);}

4、测试结果:

[{"parentId": "0","url": "/admin","menuDescribe": "系统管理","children": [{"parentId": "GN001D000","url": "/admin","menuDescribe": "权限管理","children": [{"parentId": "GN001D100","url": "/admin","menuDescribe": "密码修改","children": [],"menuId": "GN001D110"}, {"parentId": "GN001D100","url": "/admin","menuDescribe": "新加用户","children": [],"menuId": "GN001D120"}],"menuId": "GN001D100"}, {"parentId": "GN001D000","url": "/admin","menuDescribe": "系统监控","children": [{"parentId": "GN001D200","url": "/admin","menuDescribe": "在线用户","children": [],"menuId": "GN001D210"}],"menuId": "GN001D200"}],"menuId": "GN001D000"
}, {"parentId": "0","url": "/admin","menuDescribe": "订阅区","children": [],"menuId": "GN002D000"
}, {"parentId": "0","url": "/admin","menuDescribe": "未知领域","children": [],"menuId": "GN003D000"
}]

Java 递归实现树形菜单相关推荐

  1. java中遍历树形菜单,你可能不知道还有这样的方法

    版权声明:本文为CSDN博主「穆雄雄」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明. 原文链接:https://blog.csdn.net/qq_34137397/ ...

  2. java递归实现树形结构数据

    提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言 一.树形结构是什么? 二.实现方案 1.stream流递归实现 1.1 实体类 1.2 实现类 2.jdk1.7以下实 ...

  3. java实现遍历树形菜单方法——设计思路【含源代码】

    开发工具:MyEclipse 10 后台框架:Hibernate + Struts2 数据库:Oracle 11g 前台框架:EasyUi 浏览器:谷歌 在开发中我们经常会遇到左边是树形菜单,右边是一 ...

  4. java递归把list菜单列表转为菜单树

    java递归把列表转为菜单树 菜单实体类 package com.utils.menu;import java.util.List;public class Menu {private String ...

  5. java实现遍历树形菜单方法——实体类VoteTree

    package org.entity;import java.util.ArrayList; import java.util.List;/*** * * 项目名称:testTree * 类名称:Vo ...

  6. php 递归生成树形菜单,递归生成树形结构菜单

    public List listWithTree() { //1.查出所有菜单 List categoryEntities = categoryDao.selectList(null); //2.组装 ...

  7. java实现遍历树形菜单方法——数据库表的创建

    这里主要是oracle数据库表的创建: --创建树形菜单表 create table vote_tree (id number(10) not null,text varchar2(30) not n ...

  8. java实现遍历树形菜单方法——Dao层

    Dao层接口: /** * @Title: IVoteTreeDao.java * @Package org.dao * @Description: TODO该方法的主要作用: * @author A ...

  9. Java递归实现多级菜单

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

  10. java实现遍历树形菜单方法——service层

    Service接口: /** * @Title: IVoteTreeService.java * @Package org.Service * @Description: TODO该方法的主要作用: ...

最新文章

  1. 一文概述2017年深度学习NLP重大进展与趋势
  2. 程序员总结:帮助你早些明白一些道理
  3. java中static作用详解
  4. easyui-layout中的收缩层无法显示标题问题解决
  5. Zookeeper 服务注册中心
  6. Excel中配置VBA的工作环境
  7. 数据库唯一主键如何实现幂等性?
  8. UML的奥妙 - 学习UML笔记(1)
  9. C/C++基础语法复习(三):C++重载函数,多态,虚函数
  10. Spring.NET教程(十五)——事务传播行为(基础篇)
  11. 神马?写了3年代码,连分布式缓存都没用过~
  12. pyecharts 画图
  13. 如何开启QQ在线客服
  14. Activision解散《吉他英雄》,取消《真实犯罪》
  15. PX4 Bootloader解析
  16. Vue 中英文 组件 样式 写法
  17. 红米2 手机root
  18. Java常用框架笔记(1)
  19. 【Unity】TimeLine常见问题:如何实现人形角色动画的平滑切换
  20. 爬虫学习日记1-豆瓣top250电影信息爬取

热门文章

  1. iOS打包ipa文件
  2. win7计算机里不显示摄像头,win7系统不显示摄像头的解决方法
  3. 梦想还是要有的,万一实现了呢?
  4. JavaScript正则表达式分组模式:捕获性分组与非捕获性分组及前瞻后顾(断言)
  5. 泛泛而谈的渲染学习记录(一)—— 描边中的轮廓边缘
  6. 魔门云获得百万级天使轮投资,由创客100创投基金领投
  7. 【Photoshop】——Ps基础学习笔记
  8. 微信公众号第三方平台开发PYTHON教程 PART 5
  9. Python学习Day3-高级数据类型
  10. 提升用户体验?指示性设计元素不可或缺