当前位置: 首页 > news >正文

树形递归模板

详情参考CSDN链接: https://www.cnblogs.com/lidar/p/12972792.html

public class Menu {// 菜单idprivate String id;// 菜单名称private String name;// 父菜单idprivate String parentId;// 菜单urlprivate String url;// 菜单图标private String icon;// 菜单顺序private int order;// 子菜单private List<Menu> childMenus;// ... 省去getter和setter方法以及toString方法}----------------------------------------------------------------------
/*** 模块名称*/public Map<String,Object> testQueryMenuList() {// 原始的数据List<Menu> rootMenu = menuDao.queryMenuList(null);// 查看结果for (Menu menu : rootMenu) {System.out.println(menu);}// 最后的结果List<Menu> menuList = new ArrayList<Menu>();// 先找到所有的一级菜单for (int i = 0; i < rootMenu.size(); i++) {// 一级菜单没有parentIdif (StringUtils.isBlank(rootMenu.get(i).getParentId())) {menuList.add(rootMenu.get(i));}}// 为一级菜单设置子菜单,getChild是递归调用的for (Menu menu : menuList) {menu.setChildMenus(getChild(menu.getId(), rootMenu));}Map<String, Object> jsonMap = new HashMap<>();jsonMap.put("menu", menuList);//System.out.println(gson.toJson(jsonMap));//使用gson需要在pom.xml引入gson依赖见 2.1步骤//return gson.toJson(jsonMap);//返回类型为Stringreturn  jsonMap;}/*** 子方法**/private List<Menu> getChild(String id, List<Menu> rootMenu) {// 子菜单List<Menu> childList = new ArrayList<>();for (Menu menu : rootMenu) {// 遍历所有节点,将父菜单id与传过来的id比较if (StringUtils.isNotBlank(menu.getParentId())) {if (menu.getParentId().equals(id)) {childList.add(menu);}}}// 把子菜单的子菜单再循环一遍for (Menu menu : childList) {// 没有url子菜单还有子菜单//该节点不含子节点 具体见2.2解释if (StringUtils.isBlank(menu.getUrl())) {// 递归menu.setChildMenus(getChild(menu.getId(), rootMenu));}} // 递归退出条件if (childList.size() == 0) {return null;}return childList;}

//依赖

<dependency><groupId>com.google.code.gson</groupId><artifactId>gson</artifactId><version>2.2.8</version>
</dependency>
http://www.lryc.cn/news/322201.html

相关文章:

  • Python实战:Pandas数据合并与重塑
  • 如何理解 Linux 命令行参数与环境变量7
  • 奥特曼回应GPT5
  • QT----给程序添加上任务栏托盘图标和退出
  • arm地址对齐的总结
  • 就业班 2401--3.13 走进网络
  • SWIFT介绍和学习(简单入门级别)
  • 智慧城市:提升城市治理能力的关键
  • golang 对接第三方接口 RSA 做签(加密) 验签(解密)
  • Spring Data访问Elasticsearch----Elasticsearch存储库Repositories
  • 初探 Cocos Creator: 碰撞与物理系统
  • Vue组件封装方案对比——v-if方式与内置component方式
  • python与excel第四节 批量新增、删除工作表
  • 计算机网络——计算机网络体系结构
  • 近期常用linux命令总结
  • 变配电站配电监控解决方案--变电站综合自动化系统
  • 【ollama】linux、window系统更改模型存放位置,全网首发2024!
  • Spring 被打暴了! vs Javalin vs Solon
  • IDEA中快速配置Git
  • vscode用SSH远程开发c语言
  • 鸿蒙Next 支持数据双向绑定的组件:Checkbox--Search--TextInput
  • 跨越时空的纽带:探索Facebook如何连接人与人
  • LabVIEW湍流等离子体束热效率优化
  • 21个 JVM 技术点详解(附面试解答)
  • mysql逗号分隔字段拆成行简述
  • 最新梨花带雨网页音乐播放器二开优化修复美化版全开源版本源码下载
  • golang 操作redis
  • macOS - 获取硬件设备信息
  • 突破编程_C++_STL教程( queue 的基础知识)
  • Hystrix 容错机制数据监控可视界面无法加载