热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Java多级菜单排序并返回树结构菜单列表

Java多级菜单排序并返回树结

Java多级菜单排序并返回树结构菜单列表

  • 前言
  • 一、数据表
  • 二、Java实体
  • 三、Service层
  • 四、结果
  • 总结

前言

SpringBoot+MybatisPlus 对数据表中的菜单进行排序并返回树形Json格式的菜单列表


一、数据表

菜单表:t_menu
字段说明:name:菜单名称; status:1表示启用,表示停用; level:菜单级别说明; parent_id:父级菜单id,0表示一级菜单; sort_order:排序序号
在这里插入图片描述


二、Java实体

@Getter
@Setter
@Accessors(chain = true)
@TableName("t_menu")
public class Menu implements Serializable {
private static final long serialVersionUID = 1L;
@TableId(value = "id")
private String id; //菜单ID
@JSONField(ordinal = 1)
private String name;//菜单名称
@JSONField(ordinal = 2)
private Boolean status; //菜单状态 0表示禁用 1表示启用
@JSONField(ordinal = 3)
private String level; //菜单级别 例如:一级菜单、二级菜单
@JSONField(ordinal = 4)
private String parentId; //父级ID 一级菜单
@JSONField(ordinal = 5)
private Integer sortOrder; //排序 0表示最前面
//存放子菜单目录
@JSONField(ordinal = 6)
@TableField(exist = false)
private List<Menu> children;
}



三、Service层

@Service
public class MenuServiceImpl extends ServiceImpl<MenuMapper, Menu> implements IMenuService {
@Override
public List<Menu> getMenu() {
List<Menu> allMenu = baseMapper.selectList(null);//查出全部菜单
return allMenu.stream()
.filter(item -> item.getParentId().equals("0"))
.map(item -> item.setChildren(getChild(item.getId(), allMenu)))
.sorted(Comparator.comparingInt(menu -> (menu.getSortOrder() == null ? 0 : menu.getSortOrder())))
.collect(Collectors.toList());
}
private List<Menu> getChild(String id, List<Menu> allMenu) {
return allMenu.stream()
.filter(item -> item.getParentId().equals(id))
.map(item -> item.setChildren(getChild(item.getId(), allMenu)))
.sorted(Comparator.comparingInt(menu -> (menu.getSortOrder() == null ? 0 : menu.getSortOrder())))
.collect(Collectors.toList());
}
}



四、结果

{
"code": 2000,
"data": [
{
"id": "1402904218656530433",
"name": "位置管理",
"status": true,
"level": "一级菜单",
"parentId": "0",
"sortOrder": 0,
"children": []
},
{
"id": "1402904118723043329",
"name": "日志管理",
"status": true,
"level": "一级菜单",
"parentId": "0",
"sortOrder": 5,
"children": [
{
"id": "1402905060906328066",
"name": "查看日志",
"status": true,
"level": "二级菜单",
"parentId": "1402904118723043329",
"sortOrder": 0,
"children": []
}
]
},
{
"id": "1402903753264885762",
"name": "用户管理",
"status": true,
"level": "一级菜单",
"parentId": "0",
"sortOrder": 7,
"children": [
{
"id": "1402904547628376065",
"name": "账号管理",
"status": true,
"level": "二级菜单",
"parentId": "1402903753264885762",
"sortOrder": 5,
"children": []
},
{
"id": "1402904663936425985",
"name": "权限管理",
"status": true,
"level": "二级菜单",
"parentId": "1402903753264885762",
"sortOrder": 12,
"children": [
{
"id": "1402904949253955585",
"name": "修改权限",
"status": true,
"level": "三级菜单",
"parentId": "1402904663936425985",
"sortOrder": 2,
"children": []
},
{
"id": "1402904920229371906",
"name": "添加权限",
"status": true,
"level": "三级菜单",
"parentId": "1402904663936425985",
"sortOrder": 10,
"children": [
{
"id": "1402922502042918914",
"name": "测试一",
"status": true,
"level": "四级菜单",
"parentId": "1402904920229371906",
"sortOrder": 0,
"children": []
},
{
"id": "1402922463040086018",
"name": "测试二",
"status": true,
"level": "四级菜单",
"parentId": "1402904920229371906",
"sortOrder": 4,
"children": []
}
]
},
{
"id": "1402904973903880194",
"name": "删除权限",
"status": true,
"level": "三级菜单",
"parentId": "1402904663936425985",
"sortOrder": 10,
"children": []
}
]
},
{
"id": "1402904645955444738",
"name": "角色管理",
"status": true,
"level": "二级菜单",
"parentId": "1402903753264885762",
"sortOrder": 14,
"children": []
},
{
"id": "1402904723365519361",
"name": "菜单管理",
"status": true,
"level": "二级菜单",
"parentId": "1402903753264885762",
"sortOrder": 30,
"children": []
}
]
}
],
"date": 1623480149457,
"msg": "success",
"success": true
}



总结

如果这篇博客对你有帮助的话,记得给我点个赞,你的鼓励是对我最大的支持!谢谢。◕‿◕。


推荐阅读
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • Java太阳系小游戏分析和源码详解
    本文介绍了一个基于Java的太阳系小游戏的分析和源码详解。通过对面向对象的知识的学习和实践,作者实现了太阳系各行星绕太阳转的效果。文章详细介绍了游戏的设计思路和源码结构,包括工具类、常量、图片加载、面板等。通过这个小游戏的制作,读者可以巩固和应用所学的知识,如类的继承、方法的重载与重写、多态和封装等。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文讨论了如何优化解决hdu 1003 java题目的动态规划方法,通过分析加法规则和最大和的性质,提出了一种优化的思路。具体方法是,当从1加到n为负时,即sum(1,n)sum(n,s),可以继续加法计算。同时,还考虑了两种特殊情况:都是负数的情况和有0的情况。最后,通过使用Scanner类来获取输入数据。 ... [详细]
  • 阿,里,云,物,联网,net,core,客户端,czgl,aliiotclient, ... [详细]
  • 本文介绍了在Java中gt、gtgt、gtgtgt和lt之间的区别。通过解释符号的含义和使用例子,帮助读者理解这些符号在二进制表示和移位操作中的作用。同时,文章还提到了负数的补码表示和移位操作的限制。 ... [详细]
  • 本文介绍了如何在给定的有序字符序列中插入新字符,并保持序列的有序性。通过示例代码演示了插入过程,以及插入后的字符序列。 ... [详细]
  • JavaSE笔试题-接口、抽象类、多态等问题解答
    本文解答了JavaSE笔试题中关于接口、抽象类、多态等问题。包括Math类的取整数方法、接口是否可继承、抽象类是否可实现接口、抽象类是否可继承具体类、抽象类中是否可以有静态main方法等问题。同时介绍了面向对象的特征,以及Java中实现多态的机制。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 本文介绍了Java高并发程序设计中线程安全的概念与synchronized关键字的使用。通过一个计数器的例子,演示了多线程同时对变量进行累加操作时可能出现的问题。最终值会小于预期的原因是因为两个线程同时对变量进行写入时,其中一个线程的结果会覆盖另一个线程的结果。为了解决这个问题,可以使用synchronized关键字来保证线程安全。 ... [详细]
  • Android JSON基础,音视频开发进阶指南目录
    Array里面的对象数据是有序的,json字符串最外层是方括号的,方括号:[]解析jsonArray代码try{json字符串最外层是 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • [大整数乘法] java代码实现
    本文介绍了使用java代码实现大整数乘法的过程,同时也涉及到大整数加法和大整数减法的计算方法。通过分治算法来提高计算效率,并对算法的时间复杂度进行了研究。详细代码实现请参考文章链接。 ... [详细]
author-avatar
823825lml
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有