使用递归做三级菜单 Java SpringBoot

使用递归做三级菜单 Java SpringBoot

实体类

@Data
public class SysMenu implements Serializable {private Long id;private Long parentId;private String name;private Integer type;private String path;private String component;private String perms;private String icon;private Integer sortValue;private Integer status;// 下级列表private List<SysMenu> children;// 是否选中private boolean isSelect;
}

代码实现

在遍历过程中,通过判断 sysMenu 的 parentId 是否为 0,来确定是否为根节点。如果是根节点,则调用 getChildren 方法来构建子节点,并将根节点添加到 trees 列表中。

getChildren 方法用于构建子节点。首先将当前 sysMenu 的 children 属性设置为一个空的 ArrayList 对象。然后遍历 sysMenuList 中的每个 menu 对象。

在遍历过程中,首先判断 menu 的 children 是否为 null,如果是,则将其设置为一个空的 ArrayList 对象。然后判断当前 menu 的 parentId 是否与 sysMenu 的 id 相同,如果相同,则将 menu 添加到 sysMenu 的 children 中,并递归调用 getChildren 方法来构建 menu 的子节点。

最终,getChildren 方法返回构建好的 sysMenu 对象。

/*** * 使用递归方法:* 1. 找到入口* 2. 找到出口条件*/
public class MenuHelper {/*** 构建树型结构** @param sysMenuList 初始列表* @return 返回树型结构*/public static List<SysMenu> buildTree(List<SysMenu> sysMenuList) {ArrayList<SysMenu> trees = new ArrayList<>();// 把菜单进行遍历sysMenuList.forEach(sysMenu -> {// 设置入口条件if (sysMenu.getParentId() == 0) {trees.add(getChildren(sysMenu, sysMenuList));}});return trees;}/*** 构建子节点** @param sysMenu     当前* @param sysMenuList 初始解雇* @return 构建的子节点*/public static SysMenu getChildren(SysMenu sysMenu, List<SysMenu> sysMenuList) {// 设置子节点为空数组sysMenu.setChildren(new ArrayList<>());sysMenuList.forEach(menu -> {// 当子节点为 空设置为空数组if (menu.getChildren() == null) {menu.setChildren(new ArrayList<>());}// 当前id与父级id相同添加当前元素if (sysMenu.getId().equals(menu.getParentId())) {sysMenu.getChildren().add(getChildren(menu, sysMenuList));}});return sysMenu;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/752601.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

理财第一课:炒股词典

文章目录 基础代码规则委比委差量比换手率市盈率市净率 散户亏钱的原因庄家分析炒股战法波浪理论其它 钱者&#xff0c;人生之大事&#xff0c;死生存亡之地&#xff0c;不可不察也。耕田之利&#xff0c;十倍&#xff1b;珠玉之赢&#xff0c;百倍&#xff1b;闹革命&#xff…

Flask vs. Django:选择适合你的Web开发框架【第134篇—Flask vs. Django】

&#x1f47d;发现宝藏 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。【点击进入巨牛的人工智能学习网站】。 Flask vs. Django&#xff1a;选择适合你的Web开发框架 在选择一个适合你项目的Web开发框架…

功能齐全的免费 IDE Visual Studio 2022 社区版

面向学生、开放源代码和单个开发人员的功能齐全的免费 IDE 下载地址 Visual Studio 2022 社区版 - 下载最新的免费版本 Visual Studio 2022 Community Edition – Download Latest Free Version 准备安装 选择需要安装的程序 安装进行中 使用C学习程序设计相关知识并培养编程…

HTML、CSS和JavaScript在Web开发中的作用

一 解释HTML、CSS和JavaScript在Web开发中的作用 HTML (HyperText Markup Language) HTML是网页内容的结构和语义标记语言。它定义了网页的基本框架&#xff0c;包括标题、段落、列表、链接、图片等元素。HTML的主要作用是创建和组织网页内容&#xff0c;并定义这些内容的结构…

水库大坝安全监测中需要注意的事项

随着经济和社会的发展&#xff0c;水资源的需求也在不断增加。因此&#xff0c;建设水库已成为保障水资源的主要方式之一。然而&#xff0c;随着水库规模的增大和工程的复杂性的增加&#xff0c;水库大坝的安全问题也日益引起重视。为此&#xff0c;需要对水库大坝进行安全监测…

Pretrain-finetune、Prompting、Instruct-tuning训练方法的区别

来自&#xff1a;【多模态】28、LLaVA 第一版 | Visual Instruction Tuning 多模态模型的指令微调_多模态指令跟随数据-CSDN博客 几种模型训练方法的区别&#xff1a; 1、Pretrain-finetune&#xff1a;先在大量数据集上做预训练&#xff0c;然后针对某个子任务做 finetune 2…

System Verilog的接口、程序块与断言解析

接口、程序块与断言 1 接口 1.1 使用接口简化连接 // 接口 interface arb_if(input bit clk);logic [1:0] grant,request;logic rst; endinterface// 使用了简单接口的仲裁器 module arb (arb_if arbif);...always(posedge arbif.clk or posedge arbif.rst)beginif(arbif.rs…

Unity判断某个材质是否拥有某张贴图

在Unity中&#xff0c;一个材质是唯一的&#xff0c;也就是实例&#xff0c;当我们打开Debug面板时&#xff0c;就可以看清楚材质的具体信息。 其中SvaedProperties就是材质保存的属性&#xff0c;当然贴图也是属性&#xff0c;也就是TexEnvs下的属性 当然&#xff0c;要判断某…

c++11 标准模板(STL)本地化库 - std::isspace(std::locale) - 检查字符是否被本地环境分类为空白

本地化库 本地环境设施包含字符分类和字符串校对、数值、货币及日期/时间格式化和分析&#xff0c;以及消息取得的国际化支持。本地环境设置控制流 I/O 、正则表达式库和 C 标准库的其他组件的行为。 检查字符是否被本地环境分类为空白 std::isspace(std::locale) template&l…

ROS2从入门到精通1-1:详解ROS2话题通信机制与自定义消息

目录 0 专栏介绍1 话题通信模型2 话题模型实现(C)3 话题模型实现(Python)4 自定义消息 0 专栏介绍 本专栏旨在通过对ROS2的系统学习&#xff0c;掌握ROS2底层基本分布式原理&#xff0c;并具有机器人建模和应用ROS2进行实际项目的开发和调试的工程能力。 &#x1f680;详情&a…

正则表达式与re模块

目录 正则表达式 简介 语法&#xff1a; 常用元字符&#xff1a; 量词: 贪婪匹配和惰性匹配&#xff1a; re模块 简介&#xff1a; 常用的几个模块&#xff1a; 1.findall 2.search 3.finditer 4.compile 案例展示&#xff1a; 需求&#xff1a; 思路分析&#…

code摘录日记[矩阵变元素,变列向量,3D表面图,table行列设置] Matlab

矩阵变元素&#xff0c;变列向量 W1(Z1 < Z2) nan; % Z1,Z2 all matrix,Only plot points where Z1 > Z2;Z1 < Z2位置值填为NaNx x(:); % Now x is a 30-by-1 vector; matrix变列vector技巧3D表面图 hand figure; % Handle to the figure, for more plotting later…

【QED】血压高的天依

文章目录 题目测试样例 思路代码 题目 题目链接&#x1f517; 天依最近迷上了《Battlefield1》&#xff0c;游戏中每种武器都有不同的攻击伤害值。天依跟敌人对枪&#xff0c;经常在被敌人击杀后发现自己击杀了敌人99滴血&#xff0c;因此血压常常升高。为了降低天依的血压&am…

后台管理系统和前台页面的关联

一、项目bug 1、多人开发的项目冲突 2、相关框架的的运用 3、后台数据的处理 4、antd框架日期框的回显 5、上传图片的回显 6、请求的端口号不一致&#xff0c;需要做前端反向代理 二、项目用到的技术栈 reactts来进行开发后台后台用到的工具则是vite这一去轻量化工具去…

彻底学会系列:一、机器学习之梯度下降(1)

1 梯度下降概念 1.1 概念 梯度下降是一种优化算法&#xff0c;用于最小化一个函数的值&#xff0c;特别是用于训练机器学习模型中的参数&#xff0c;其基本思想是通过不断迭代调整参数的值&#xff0c;使得函数值沿着梯度的反方向逐渐减小&#xff0c;直至达到局部或全局最小…

如何使用SFC和DISM命令修复损坏的Windows系统文件?这有详细步骤

前言 Windows内置的系统文件检查器工具可以扫描Windows系统文件是否损坏或任何其他更改。如果文件已被修改,它将自动用正确的版本替换该文件。以下是如何使用它。 何时应该运行SFC或DISM 如果Windows出现蓝屏或其他崩溃,应用程序出现故障,或者某些Windows功能无法正常工作…

HBase常用命令

简介&#xff1a; HBase Shell 是一种操作HBase的交互模式&#xff0c;支持完整的HBase命令集。 hbase shell # 打开Hbase Shell目录: 命令类别常用命令Generalversion&#xff0c;status&#xff0c;whoami&#xff0c;helpDDLalter&#xff0c;creater&#xff0c;descri…

python网络编程:通过socket实现TCP客户端和服务端

目录 写在开头 socket服务端&#xff08;基础&#xff09; socket客户端&#xff08;基础&#xff09; 服务端实现&#xff08;可连接多个客户端&#xff09; 客户端实现 数据收发效果 写在开头 近期可能会用python实现一些网络安全工具&#xff0c;涉及到许多关于网络…

供电系统分类详解

一、供电系统分类 电力供电系统一般有5种供电模式&#xff0c;常用的有&#xff1a;IT系统&#xff0c;TT系统&#xff0c;TN系统&#xff0c;其中TN系统又可以分为TN-C&#xff0c;TN-S&#xff0c;TN-C-S。 1、TN-C系统&#xff08;三相四线制&#xff09; 优点: 该系统中…

【无标题】自用款。。。

#include #include // #include <string.h> // 定义结构体 struct Student { char name[30]; int age; float score; }; // 定义比较函数&#xff0c;用于std::sort对结构体数组进行排序 bool compareStudentsByScore(const Student& a, const Student& b) {…