JAVA递归生成树形菜单的实现方法是什么
发表于:2025-01-20 作者:千家信息网编辑
千家信息网最后更新 2025年01月20日,今天小编给大家分享一下JAVA递归生成树形菜单的实现方法是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下
千家信息网最后更新 2025年01月20日JAVA递归生成树形菜单的实现方法是什么
今天小编给大家分享一下JAVA递归生成树形菜单的实现方法是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。
递归生成一个如图的菜单,编写两个类数据模型Menu、和创建树形的MenuTree。通过以下过程实现:
1.首先从菜单数据中获取所有根节点。
2.为根节点建立次级子树并拼接上。
3.递归为子节点建立次级子树并接上,直至为末端节点拼接上空的"树"。
首先,编写数据模型Menu。每条菜单有自己的id、父节点parentId、菜单名称text、菜单还拥有次级菜单children。
import java.util.List;public class Menu { private String id; private String parentId; private String text; private String url; private String yxbz; private List
创建树形结构的类MenuTree。方法getRootNode获取所有根节点,方法builTree将根节点汇总创建树形结构,buildChilTree为节点建立次级树并拼接上当前树,递归调用buildChilTree不断为当前树开枝散叶直至找不到新的子树。完成递归,获取树形结构。
import java.util.ArrayList;import java.util.List;public class MenuTree { private List
最后,插入一些数据试试效果。得到的json就可以生成图一菜单了。
import java.util.ArrayList;import java.util.List;import com.alibaba.fastjson.JSON;public class Hello { public static void main(String []args) { ListmenuList= new ArrayList (); /*插入一些数据*/ menuList.add(new Menu("GN001D000","0","系统管理","/admin","Y")); menuList.add(new Menu("GN001D100","GN001D000","权限管理","/admin","Y")); menuList.add(new Menu("GN001D110","GN001D100","密码修改","/admin","Y")); menuList.add(new Menu("GN001D120","GN001D100","新加用户","/admin","Y")); menuList.add(new Menu("GN001D200","GN001D000","系统监控","/admin","Y")); menuList.add(new Menu("GN001D210","GN001D200","在线用户","/admin","Y")); menuList.add(new Menu("GN002D000","0","订阅区","/admin","Y")); menuList.add(new Menu("GN003D000","0","未知领域","/admin","Y")); /*让我们创建树*/ MenuTree menuTree =new MenuTree(menuList); menuList=menuTree.builTree(); /*转为json看看效果*/ String jsonOutput= JSON.toJSONString(menuList); System.out.println(jsonOutput); }}
补充:java递归生成树形结构菜单
一、mysql表,数据自行准备
CREATE TABLE `sys_menu` ( `id` int(11) NOT NULL AUTO_INCREMENT, `pid` bigint(20) DEFAULT NULL, `title` varchar(255) CHARACTER SET utf8 DEFAULT NULL, `path` varchar(255) CHARACTER SET utf8 DEFAULT NULL, `level` int(11) DEFAULT NULL, `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=200 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
二、创建对应的实体类
public class Menu implements Serializable { private static final long serialVersionUID = -5990021029947688358L; private Integer id; private String title;//菜单标题 private String path;//路径 private Integer pid;//父菜单ID 一级菜单pid为null private Integer level;//级别,排序用 private Listchildren = new ArrayList (); public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getPath() { return path; } public void setPath(String path) { this.path = path; } public Integer getPid() { return pid; } public void setPid(Integer pid) { this.pid = pid; } public Integer getLevel() { return level; } public void setLevel(Integer level) { this.level = level; } public List getChildren() { return children; } public void setChildren(List children) { this.children = children; }}
三、递归组装树形结构函数实现
/** * @方法名: parseMenuTree
* @描述: 组装菜单
* @param list 数据库里面获取到的全量菜单列表 * @return */ public static ListparseMenuTree(List list){ List result = new ArrayList (); // 1、获取第一级节点 for (Menu menu : list) { if(null == menu.getPid()) { result.add(menu); } } // 2、递归获取子节点 for (Menu parent : result) { parent = recursiveTree(parent, list); } return result; } public static Menu recursiveTree(Menu parent, List list) { for (Menu menu : list) { if(Objects.equals(parent.getId(),menu.getPid())) { menu = recursiveTree(menu, list); parent.getChildren().add(menu); } } return parent; }
四、从数据库获取菜单数据,调用组装菜单函数生成树形结构的数据
public static void main(String[] args) { Listlist = new ArrayList (); //TODO 这里从数据库获取全量菜单后放到list中 //树形结构数据生成 List result = parseMenuTree(list); System.out.println(JSONObject.toJSONString(result)); }
以上就是"JAVA递归生成树形菜单的实现方法是什么"这篇文章的所有内容,感谢各位的阅读!相信大家阅读完这篇文章都有很大的收获,小编每天都会为大家更新不同的知识,如果还想学习更多的知识,请关注行业资讯频道。
菜单
树形
数据
节点
递归
结构
生成
方法
次级
知识
篇文章
数据库
子树
内容
函数
效果
时间
模型
用户
系统
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
高青物料开单软件开发公司
java 对象数据库中
软件开发实习内容描述
全国工商联数据库
娄底智能软件开发中介
网络安全体系建设情况
北京凶宅数据库是真的吗
怎么把数据库备份到电脑
查询表中的相同的数据库
网络技术基础看不懂
网络安全类专业高校排名
服务器的防火墙作用
证书服务器迁移
北京安浩网络技术服务
chip数据库包括什么
软件开发部门每天计划
数据库计算机二级选择题
网络安全拍照
互联网教育科技人工智能
全球医疗系统网络安全
网络安全管理人员培训内容
明日之后三字服务器pc端
用JDBC连接达梦数据库
网络安全app下载免费
服务器和虚拟主机
上海双凌电脑软件开发中心
对科技和互联网的看法
鸿鼎软件开发
经络检测仪软件开发
巴林左旗定制软件开发口碑推荐