java递归生成树形结构菜单

Java递归实现菜单树 上述示例创建了一个菜单树,其中包含根菜单项"Root",以及一级菜单项"Menu 1"和"Menu 2"。“Menu 1"下有二级菜单项"Submenu 1-1"和"Submenu 1-2”,“Menu 2"下有二级菜单项"Submenu 2-1"和"Submenu 2-2”。“Submenu 1-1"下有三级菜单项"Subsubmenu 1-1-1"和"Subsubmenu 1-1-2”,“Submenu 1-2"下有三级菜单项"Subsubmenu 1-2-1”。的类,用于表示菜单树。 阅读详情

一、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 List<Menu> children = new ArrayList<Menu>();

	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<Menu> getChildren() {
		return children;
	}

	public void setChildren(List<Menu> children) {
		this.children = children;
	}
}

三、递归组装树形结构函数实现

        /**
         * @方法名: parseMenuTree<br>
         * @描述: 组装菜单<br>
         * @param list 数据库里面获取到的全量菜单列表
         * @return
         */
        public static List<Menu> parseMenuTree(List<Menu> list){
	    List<Menu> result = new ArrayList<Menu>();
		
	    // 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<Menu> 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) {
		
		List<Menu> list = new ArrayList<Menu>();
		//TODO 这里从数据库获取全量菜单后放到list中
		
		//树形结构数据生成
		List<Menu> result = parseMenuTree(list);
		
		System.out.println(JSONObject.toJSONString(result));
	}

 

工程师必看:如何用功率谱密度搞定随机振动测试(附Grms计算实例) 本文为工程师详解如何通过功率谱密度(PSD)曲线计算Grms(总均方根加速度),从而量化随机振动测试的强度。文章拆解了平直谱、斜谱的计算公式,提供了完整的Grms计算实例,并指出了单位换算、对数坐标等常见工程陷阱,帮助工程师精准完成测试准备与设备推力评估。 阅读详情

相关推荐

SAP LSMW保姆级操作文档

SAP LSMW(Legacy System Migration Workbench)是一个强大的工具,旨在简化旧系统数据向SAP系统的迁移过程。它允许用户通过多种方式导入数据,包括直接输入、批处理输入和BAPI。LSMW支持数据映射和转换,确保数据在迁移过程中保持一致性,减少手动输入的需求,从而提高效率,适用于新系统实施和数据更新项目。在日常运维过程中我们经常会遇到用户要求我们批量改一写数据,通常这些字段的信息有些SAP是提供程序可以批量进行更改的比如主数据的MM17、通用更改数据的MASS。

我小时候很黑的博客 4954

Java菜单树递归

Java菜单树递归

java李阳勇的博客 6279

如何用Megatron-LM搭建多卡集群?手把手教你配置分布式训练环境

本文提供了一份详细的Megatron-LM多卡集群搭建实战指南。从硬件兼容性检查、软件栈版本对齐,到分布式并行策略(数据并行、张量并行、流水线并行)的配置与多节点启动脚本编写,手把手教你配置稳定高效的分布式训练环境,并分享了关键的排错与性能调优经验。

yellow的专栏 414

树形菜单的实现方式

以上我们介绍了三种在Java中实现树形菜单的方法,从基础的递归法、队列法到使用Map进行优化。根据实际需求和数据量大小,你可以选择合适的方法进行实现。不过,无论使用哪种方法,都要确保理解树形结构的基础原理和具体实现细节,以确保代码的正确性和效率。还有一种是路径枚举方式的一个简单例子,它已经足够用于实际应用。当然,还有许多细节可以优化,如路径长度限制、节点移动等。而其他的树形编号方法,如嵌套集模型和闭包表,会有更复杂的逻辑。但总的来说,理解核心概念并将其应用于实际代码是关键。

m0_64363449的博客 991

模拟调制系统实战:从AM到FM的5种调制方式对比与选型指南

本文深度解析AM、DSB、SSB、VSB、FM五种经典模拟调制方式,从实现电路、频谱效率、抗噪性能及工程成本等维度进行实战对比。通过MATLAB/Simulink仿真案例,提供清晰的选型决策框架,帮助工程师在无人机图传、短波通信、广播系统等具体项目中,根据带宽、功耗和抗干扰需求选择最优方案。

study的专栏 932

Arduino+L298N电机驱动模块避坑指南:从接线到PWM调速的5个常见错误

本文详细解析了使用Arduino与L298N电机驱动模块时,从电源配置、跳线帽使用到PWM调速的5个常见错误与避坑指南。重点阐述了如何正确分离逻辑与电机电源、拔掉ENA/ENB跳线帽以实现PWM调速、理解H桥接线逻辑以控制直流电机正反转,并提供优化代码与散热建议,帮助开发者稳定驱动电机。

rust6ferris的博客 563

Java 递归实现树形菜单

1、实现效果:2、实现思路:递归生成思路,编写两个类: 数据模型Menu、和 创建树形的MenuTree。通过以下过程实现:1.首先从菜单数据中获取所有根节点。 2.为根节点建立次级子树并拼接上。 3.递归为子节点建立次级子树并接上,直至为末端节点拼接上空的“树”。3、实现代码1、首先,编写数据模型Menu。每条菜单有自己的menuId、父节点parentId、菜单名称menuDescribe、菜单还拥有次级菜单children。 2、创建树形结构的类MenuTree。方法getRootNode获取所有根节

怎么老是你的博客 2260

支付漏洞防护绕过的一种方式

放完包后就到了提交订单的地方,可以发现,金额确实小了很多,合理的搭配的话还可以更低,再次前进可以发现,金额确实是这么多,后面就不支付了,到此就结束了。也就是说数量可以为负数,但是金额不能为0或者0以下,有什么方法可以绕过这个限制吗,其实并不难,既然可以为负数,只是对金额不能为0或者负数做了限制。我们可以尝试拼接法,利用负数加上正数让他的值变得很低,但是又大于0就可以了,这里利用购物车的结算方法,随机加一些在购物车里。这里为了方便查看数据包,我这边商品的数量选择3,点击立即购买并抓包。

2301_80115097的博客 1529

JAVA中生成菜单树结构常用方法总结

前言项目开发中经常会遇到树形结构,如多级菜单、多级文件夹结构、多级分类结构、多级组织结构,这些结构都有个共同特点,就是一般存在数据库中是通过id和parentId保存父子级关系的,返回给前端需要合成一颗树,本文针对这类数据结构,总结出常用合成树的三种方法。方法一:递归合成法一般在会有一个Menu对象登录后复制 @Data...

weixin_34042899的博客 603

陀螺仪与加速度计的姿态融合——互补滤波

本篇文章我们来讲讲如何将陀螺仪和加速度计的数据结合起来,获取更准确的姿态数据,使用的是互补滤波的方法。

小白白学电子 2万+

标准化降水指数介绍

Mckee et al.(1993)认为降水量的减少是导致干旱的主要因素,其他气候因子一般变化较小,对干旱产生的影响不大,因此SPI使用降水量作为唯一参数。SPI能较好表达因降水量的大小反映干旱状况,操作简单,所需资料仅为降水量,同时该干旱指数在各个地区和各个时段都具有良好的计算稳定性,是继PDSI之后另一种被广泛应用的干旱指数。𝐻(𝑥)是Γ分布求得的概率,并当𝐻(𝑥)>0.5时,S=1;式中,𝛼是形状参数,𝛽是尺度参数,𝑥是当月降水量,𝛤(𝛼)是Gamma函数,用极大似然估计法计算最佳的𝛼和𝛽,即。

weixin_44259522的博客 2857

Java递归生成树形菜单

  递归生成一个如图的菜单,编写两个类数据模型Menu、和创建树形的MenuTree。通过以下过程实现:     1.首先从菜单数据中获取所有根节点。     2.为根节点建立次级子树并拼接上。     3.递归为子节点建立次级子树并接上,直至为末端节点拼接上空的“树”。 首先,编写数据模型Menu。每条菜单有自己的id、父节点parentId、菜单名称text、菜单还拥有次级菜单chil...

cocosun 804

数学建模学习(120):使用Python实现基于AHP的供应商选择分析

使用Python实现基于AHP的供应商选择分析

全栈川川 912

JAVA语言递归生成树形菜单

JAVA递归生成树形菜单 递归生成一个如图的菜单,编写两个类数据模型Menu、和创建树形的MenuTree。通过以下过程实现: 1.首先从菜单数据中获取所有根节点。 2.为根节点建立次级子树并拼接上。 3.递归为子节点建立次级子树并接上,直至为末端节点拼接上空的“树”。          首先,编写数据模型Menu。每条菜单有自己的id、父节点parentId、菜单名称text、菜单还拥有次级菜单children。 import java.util.List; public class Menu {

张同学的博客 974

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

java递归mysql生成树_java从数据库读取菜单,递归生成菜单树

首先看一下菜单的样子根据这个样子我们定义菜单类public class Menu {// 菜单idprivate String id;// 菜单名称private String name;// 父菜单idprivate String parentId;// 菜单urlprivate String url;// 菜单图标private String icon;// 菜单顺序private int o...

weixin_42450002的博客 902

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Java菜单树形结构

转自:Java构建树形菜单 - chen-hao - 博客园 (cnblogs.com) Java构建树形菜单 构建树形菜单 效果图:支持多级菜单。 菜单实体类: public class Menu { // 菜单id private String id; // 菜单名称 private String name; // 父菜单id private String parentId; // 菜单url private Strin

谭声俊的博客 909

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

使用Mybatis生成树形菜单-适用于各种树形场景

开发中就是需要这种记录,为什么呢,当你没看到这篇文章你写一个树形结构的代码可能需要一天,而你点一下关注,后面开发中你遇到这种功能的开发一个小时应该就能搞定并且还没有问题,极大的提高了开发效率,领导看到你效率那么高应该也会很高兴,说不定升职加薪就在眼前。比如用户登录系统后菜单的展示,某些大型购物网站商品的分类展示等等,反正开发中会遇到各种树形展示的功能,这些功能大概处理的思路都是一样的,所以本文就总结一下树形结构的代码生成,在开发的时候套用这种结构就可以了。有的小伙伴可能会说,博主我们项目使用的jdk7。

接需求(Java),各个平台都同名,欢迎搜索关注 624

JAVA----递归生成菜单

递归生成菜单 实体 @Data public class MenuTree implements Serializable { private static final long serialVersionUID = -7572373743354217640L; private Integer id; private String name; private Integer pid; private String url; private Integer

Damys 349

【面试题】 Java 实现多级菜单查询

Java实现多级递归 声明: 此答案是百度的,纯属记录今天面试的时候遇到的问题,和面试官磕了半天,当然实际题目没有这么简单! 实体类 public class Menu { // 菜单id private String id; // 菜单名称 private String name; // 父菜单id private String parentId; // 菜单url private String url; // 菜单图标 private String icon

lmy 2217

java递归遍历树节点6_关于JAVA递归遍历树级菜单结构

需求一:这种不需要传任何参数一、数据库存储的菜单结果:parentid为0的都是根节点,也就是一级菜单,后面的子菜单的parentid为父菜单的ID。二、MenuDTO类(菜单类)的结构:@Datepublic class MenuDTO {private Integer id;private String content;private Integer parentid;private Date...

weixin_29061531的博客 785

java数据库连接树状图_Java 数据库树形查询生成菜单结构

Java 数据库树形查询JAVA从数据库读取菜单,递归生成菜单树。 定义菜单类public class Menu {// 菜单idprivate String id;// 菜单名称private String name;// 父菜单idprivate String parentId;// 菜单urlprivate String url;// 菜单图标private String icon;// 菜...

weixin_31954813的博客 232

java实现多级菜单(递归)

菜单实体类: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 publicclassMenu { // 菜单id privateString id; // ...

哟,你又在偷偷写bug! 868

树形结构递归_管理系统必备技(1):递归生成树形结构菜单

微信公众号:潇雷当努力到一定程度,幸运自与你不期而遇。1、概述后台管理系统是web开发必备的一个项目,因此有必要对系统的一些基本功能做个梳理,今天要看的内容是如何递归生成树形结构菜单,效果图如下:菜单分为一级菜单、二级菜单、复杂的菜单甚至包含三级菜单和四级菜单,这些数据在表里面都是在一个菜单目录表里。表的核心设计如下:字段名称备注idint主键idparent_idint一级菜单为0 ,...

weixin_28323057的博客 526

java mysql 树查询_Java 数据库树形查询生成菜单结构

Java 数据库树形查询JAVA从数据库读取菜单,递归生成菜单树。定义菜单类public class Menu {// 菜单idprivate String id;// 菜单名称private String name;// 父菜单idprivate String parentId;// 菜单urlprivate String url;// 菜单图标private String icon;// 菜单...

weixin_42516581的博客 451

使用Java流API构建树形结构数据

使用Java流API构建树形结构数据

m0_55337678的博客 1202

java递归实现多级菜单栏_[Java教程]利用递归实现简单的树结构菜单

[Java教程]利用递归实现简单的树结构菜单02016-09-08 18:00:21数据格式:var data = [{title: "11111",childs : [{title:"aaaaa", childs:[{title: "xg"}]},{title:"bbbbb"}]},{title: "22222",childs : [{title:"aaaaa"},{title:"bbbbb"}...

weixin_30357183的博客 205
上一篇: spring boot 设置允许跨域访问遇到的问题解决
下一篇: 看了又记不住的JAVA知识整理
咚咚阳丶
博客等级 码龄15年 1968粉丝 91原创
评论 27
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值