JavaWeb - 多级菜单、分组嵌套“递归”写法
发布日期:2021-06-30 23:37:29
浏览次数:2
分类:技术文章
本文共 2547 字,大约阅读时间需要 8 分钟。
设计思路:最简单的查询全部分组数据,然后通过 Java 程序控制分层问题,借用临时 Map 来快速定位父子分组关系噢~
- SQL
DROP TABLE IF EXISTS `t_ac_api_group`;CREATE TABLE `t_ac_api_group` ( `group_id` varchar(32) NOT NULL COMMENT '分组Id', `group_name` varchar(30) NOT NULL COMMENT '分组名称', `group_pid` varchar(32) NOT NULL COMMENT '分组父Id', `group_type` tinyint(1) NOT NULL COMMENT '分组类型', `group_del` tinyint(1) NOT NULL, `group_createtime` datetime NOT NULL, `group_updatetime` datetime NOT NULL, PRIMARY KEY (`group_id`) USING BTREE) ENGINE=InnoDB DEFAULT CHARSET=utf8;
- 伪代码
import com.baomidou.mybatisplus.annotation.*;import com.fasterxml.jackson.annotation.JsonInclude;import lombok.AllArgsConstructor;import lombok.Builder;import lombok.Data;import lombok.NoArgsConstructor;import java.time.LocalDateTime;import java.util.List;/** * @author Lux Sun * @date 2020/6/5 */@Data@Builder@NoArgsConstructor@AllArgsConstructor@TableName("t_ac_api_group")public class ApiGroupPO { @TableId(type = IdType.ASSIGN_UUID) private String groupId; private String groupName; private String groupPid; private Integer groupType; @TableField(exist = false) private ListgroupList; @TableLogic @TableField(fill = FieldFill.INSERT, select = false) private Integer groupDel; @TableField(fill = FieldFill.INSERT) private LocalDateTime groupCreatetime; @TableField(fill = FieldFill.INSERT_UPDATE) private LocalDateTime groupUpdatetime;}
/** * [OK] * 获取根分组集 * @return */@Overridepublic ListgetGroupListByType() { QueryWrapper qw = new QueryWrapper<>(); qw.orderByDesc(Const.Group.COLUMN_GROUPUPDATETIME); List apiGroupPoList = groupDao.selectList(qw); apiGroupPoList = dealApiGroupLayer(apiGroupPoList); return apiGroupPoList;}/** * [OK] * 处理分组层级 * @param apiGroupList */private List dealApiGroupLayer(List apiGroupList) { Map id2GroupMap = apiGroupList.stream().collect(Collectors.toMap(ApiGroupPO::getGroupId, apiGroupPO -> apiGroupPO)); List finalApiGroupPoList = Lists.newArrayList(); for (ApiGroupPO apiGroupPo : apiGroupList) { String groupPid = apiGroupPo.getGroupPid(); if (Const.Group.VAL_GROUPPIDROOT.equals(groupPid)) { finalApiGroupPoList.add(apiGroupPo); continue; } ApiGroupPO apiParentGroupPo = id2GroupMap.get(groupPid); // 如果为空, new List 赋值过去; 不为空也不影响, 大不了自己 set 自己一下 apiParentGroupPo.setGroupList(Optional.ofNullable(apiParentGroupPo.getGroupList()).orElse(Lists.newArrayList())); apiParentGroupPo.getGroupList().add(apiGroupPo); } return finalApiGroupPoList;}
转载地址:https://lux-sun.blog.csdn.net/article/details/117334914 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
哈哈,博客排版真的漂亮呢~
[***.90.31.176]2024年04月10日 16时13分22秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
java常用类 String面试题
2019-04-30
Windows10下的powershell美化教程
2019-04-30
利用ffmpeg合并音频和视频
2019-04-30
solr修改schema文件(solr修改配置文件)
2019-04-30
select下拉框分组展示插件的使用--(select-mania插件的使用)
2019-04-30
Java Lambda表达式的应用--Stream API操作集合框架
2019-04-30
solr的使用详解
2019-04-30
Myslq连接(JDBC)url属性的参数的设置
2019-04-30
关于Spring MVC与前端的交互
2019-04-30
大厂经典面试题:Redis为什么这么快?
2019-04-30
Android之Retrofit基本用法篇
2019-04-30
Netty与网络协议资料整理
2019-04-30
Golang 逃逸分析
2019-04-30
golang实现大数据量文件的排序
2019-04-30
golang中的time包
2019-04-30
2019NOIP D4题 加工领奖
2019-04-30
2021.5.19 JS高级第二天
2019-04-30