Java递归生成树形菜单结构的json

Java递归生成树形菜单结构的json

  • 1.数据class
  • 2.获取数据方法
  • 3. 组装数据的的递归方法
  • 4. 案例
  • 5. 结果输出

1.数据class

Dept.java

public class Dept {/** uuid */private String id;/** 部门名称 */private String  name;/** 父id */private String parentId;private List<MfjcDeptVo> children;public MfjcDeptVo(String id, String name, String parentId) {this.id = id;this.name = name;this.parentId = parentId;}
}

2.获取数据方法

private List<Dept> getListDept(){List<Dept> deptList = new ArrayList<>();deptList.add(new Dept("001","一级部门1","0"));deptList.add(new Dept("009","一级部门2","0"));deptList.add(new Dept("002","二级部门1","001"));deptList.add(new Dept("003","三级部门1","002"));deptList.add(new Dept("004","二级部门2","001"));deptList.add(new Dept("005","三级部门2","002"));deptList.add(new Dept("006","二级部门3","001"));deptList.add(new Dept("007","三级部门3","002"));deptList.add(new Dept("008","三级部门4","002"));return deptList;
}

3. 组装数据的的递归方法

private List<Dept> deepCategory(String id, List<Dept> deptList){List<Dept> result = new ArrayList<>();deptList.forEach(x ->{if (id.equals(x.getParentId())){List<Dept> dept = this.deepCategory(x.getId(), deptList);x.setChildren(dept);result.add(x);}});return result;
}

4. 案例

public String getDept(){List<Dept> deptList = getListDept();List<Dept> deptListTree = deepCategory("0", deptList);String jsonString = JSONObject.toJSONString(deptListTree);System.out.println(jsonString); //输出结果请看第5部分return jsonString;
}private List<Dept> getListDept(){List<Dept> deptList = new ArrayList<>();deptList.add(new Dept("001","一级部门1","0"));deptList.add(new Dept("009","一级部门2","0"));deptList.add(new Dept("002","二级部门1","001"));deptList.add(new Dept("003","三级部门1","002"));deptList.add(new Dept("004","二级部门2","001"));deptList.add(new Dept("005","三级部门2","002"));deptList.add(new Dept("006","二级部门3","001"));deptList.add(new Dept("007","三级部门3","002"));deptList.add(new Dept("008","三级部门4","002"));return deptList;
}private List<Dept> deepCategory(String id, List<Dept> deptList){List<Dept> result = new ArrayList<>();deptList.forEach(x ->{if (id.equals(x.getParentId())){List<Dept> dept = this.deepCategory(x.getId(), deptList);x.setChildren(dept);result.add(x);}});return result;
}

5. 结果输出

[{"children": [{"children": [{"children": [],"id": "003","name": "三级部门1","parentId": "002"},{"children": [],"id": "005","name": "三级部门2","parentId": "002"},{"children": [],"id": "007","name": "三级部门3","parentId": "002"},{"children": [],"id": "008","name": "三级部门4","parentId": "002"}],"id": "002","name": "二级部门1","parentId": "001"},{"children": [],"id": "004","name": "二级部门2","parentId": "001"},{"children": [],"id": "006","name": "二级部门3","parentId": "001"}],"id": "001","name": "一级部门1","parentId": "0"},{"children": [],"id": "009","name": "一级部门2","parentId": "0"}
]

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

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

相关文章

高速AI光模块–通往400G/800G及更高速率

人工智能&#xff08;AI&#xff09;领域对高速数据传输的需求推动了光学技术取得显著进步。本文探讨了实现400G/800G速率的演进历程并展望这些技术在未来能够提供更强大功能。我们深入研究高速400G/800G AI光模块的需求、演变和重要性&#xff0c;展现它们对各个行业的变革性影…

Python 在windows环境下加密文件成.pyd格式

首先 pip install easycython然后打开在要加密的文件同一目录下cmd命令框&#xff0c;命令行里键入 easycython 你要加密的文件.py 最后会在目录下看见有个.pyd的文件&#xff0c;只保留这个文件&#xff0c;剩下的都删了&#xff0c;其他引用该文件的python文件该咋用咋用。…

Vue 3 + Vite项目实战:常见问题与解决方案全解析

文章目录 一、项目使用本地图片打包后不显示1、在html中时候&#xff0c;本地运行和打包后线上运行都ok。2、用动态数据&#xff0c;本地运行ok&#xff0c;打包后线上运行不显示3、适用于处理单个链接的资源文件4、用动态数据且本地和线上访问都可显示 二、使用插件vite-plugi…

leetcode2739--总行驶距离

1. 题意 典型的空瓶换酒问题。 2. 题解 2.1 直接模拟 class Solution { public:int distanceTraveled(int mainTank, int additionalTank) {int ans 0;while (mainTank > 5) {ans mainTank/5*5;int extra min(mainTank/5, additionalTank);mainTank % 5;mainTank e…

element -ui 横向时间轴,时间轴悬浮对应日期

效果&#xff1a; <el-tabs v-model"activeName" type"card" tab-click"handleClick"><el-tab-pane label"周期性巡视" name"zqxxs" key"zqxxs" class"scrollable-tab-pane"><div v-if…

程序员视角下的AIGC技术:现状、挑战与未来展望

在当今科技日新月异的时代&#xff0c;人工智能生成内容(AIGC)技术正在以前所未有的速度改变着内容创作的格局。作为一名程序员&#xff0c;我密切关注这一领域的发展&#xff0c;并试图从技术角度剖析其现状&#xff0c;探讨未来的趋势。 AIGC技术的发展现状 目前&#xff0…

【11-Ⅱ】Head First Java 学习笔记

HeadFirst Java 本人有C语言基础&#xff0c;通过阅读Java廖雪峰网站&#xff0c;简单速成了java&#xff0c;但对其中一些入门概念有所疏漏&#xff0c;阅读本书以弥补。 第一章 Java入门 第二章 面向对象 第三章 变量 第四章 方法操作实例变量 第五章 程序实战 第六章 Java…

vlan的学习笔记2(vlan间通信)

1.使用路由器的物理接口 原理&#xff1a;在二层交换机上配置VLAN&#xff0c;每个VLAN单独使用一个交换机接口与路由器互联。路由器使用两个物理接口&#xff0c;分别作为VLAN 10及VLAN 20内PC的默认网关&#xff0c;使用路由器的物理接口实现VLAN之间的通信。 实验1&#x…

EasyCVR视频汇聚平台无法自动播放视频的原因排查与解决

国标GB28181协议EasyCVR安防视频监控平台可以提供实时远程视频监控、视频录像、录像回放与存储、告警、语音对讲、云台控制、平台级联、磁盘阵列存储、视频集中存储、云存储等丰富的视频能力&#xff0c;平台支持7*24小时实时高清视频监控&#xff0c;能同时播放多路监控视频流…

手撕sql面试题:根据分数进行排名,不使用窗口函数

分享一道面试题&#xff1a; 有一个分数表id 是该表的主键。该表的每一行都包含了一场考试的分数。Score 是一个有两位小数点的浮点值。 以下是表结构和数据&#xff1a; Create table Scores ( id int(11) NOT NULL AUTO_INCREMENT, score DECIMAL(3,2), PRIMARY KEY…

Git和SVN有什么区别?

Git和SVN都是版本控制系统&#xff0c;它们都是用来帮助团队协同开发&#xff0c;管理代码版本的。但是&#xff0c;git和svn在实现方式&#xff0c;使用方法&#xff0c;特性等方面都存在一些差异 分布式 vs 集中式 这是二者之间最大的区别。Git是分布式版本控制系统&#xff…

Java23种设计模式-结构型模式之桥接模式

桥接模式&#xff08;Bridge Pattern&#xff09;&#xff1a;将抽象部分与它的实现部分分离&#xff0c;使它们都可以独立地变化。 通常以下角色&#xff1a; 角色1.抽象类&#xff08;Abstraction&#xff09;&#xff1a;定义抽象接口。 角色2.扩展抽象类&#xff08;Refin…

通过nrm管理源地址

安装nrm npm install -g nrm版本及帮助 Options:-V, --version 查看版本号-h, --help 帮助命令如下图 常用命令 Commands:ls 全部注册数据源列表current [options] 显示当前使用的…

ICCV2023人脸识别TransFace论文及代码学习笔记

论文链接&#xff1a;https://arxiv.org/pdf/2308.10133.pdf 代码链接&#xff1a;GitHub - DanJun6737/TransFace: Code of TransFace 背景 尽管ViTs在多种视觉任务中展示了强大的表示能力&#xff0c;但作者发现&#xff0c;当应用于具有极大数据集的人脸识别场景时&#…

SpringMVC 源码剖析

SpringMVC 源码剖析 0 从源码角度分析SpringMVC执行流程 // 前端控制器&#xff0c;SpringMVC最核心的类 public class DispatcherServlet extends FrameworkServlet {// 前端控制器最核心的方法&#xff0c;这个方法是负责处理请求的&#xff0c;一次请求&#xff0c;调用一次…

C语言趣味代码(三)

这一篇主要围绕写一个程序---寻找数字 来写&#xff0c;在这篇我会详细和大家介绍基本实现以及它的改良版&#xff0c;还有相关知识的拓展&#xff0c;干货绝对满满。 1. 寻找数字 在这一主题下&#xff0c;我们会编写一些代码&#xff0c;来锻炼玩家的反应力&#xff0c;同时…

【python源码解析】深入 Pandas BlockManager 的数据结构和初始化过程

作者介绍&#xff1a;10年大厂数据\经营分析经验&#xff0c;现任大厂数据部门负责人。 会一些的技术&#xff1a;数据分析、算法、SQL、大数据相关、python 欢迎加入社区&#xff1a;码上找工作 作者专栏每日更新&#xff1a; LeetCode解锁1000题: 打怪升级之旅 python数据分析…

Vue2学习笔记(尚硅谷天禹老师)

目录 一、入门案例 二、模板语法 三、数据绑定 四、el和data的两种写法 五、MVVM模型 六、Object.defineproperty方法 七、Vue中响应式原理 八、数据代理 九、methods配置项 十、Vue中的事件处理 十一、Vue中的键盘事件 十二、计算属性 十三、监视属性watch 十四、绑定Class样式…

数据库构建中的三范式设计(附SQL实例说明)

数据库构建中的三范式&#xff08;附SQL实例说明&#xff09; 设计数据库时遵循三范式&#xff08;1NF、2NF、3NF&#xff09;是关系型数据库设计中用于减少数据冗余、提高数据一致性的理论基础。 第一范式&#xff1a;任何一张表必须有主键&#xff0c;每个字段原子性不可再分…

主控制文件(项目的开始)食用顺序_3

遇到问题加QQ群聊 群主在线解答 点击加入群聊【星辰开发】 该文档 如有更新 会直接修改此文档 目前版本 2024.4.23 本项目需求 控制文件 尽量不修改 代码要简介快速 控制文件代码如下 from flask import Flask, request# 三种事件扩展包 自行创建 import Group # 群聊事…