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 List
groupList; @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 List
getGroupListByType() { 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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:程序人生 - 为啥明星都一窝蜂去开火锅店?
下一篇:程序人生 - 2021浙A区域号牌限行规定(限行时间+限行路段+限行范围图)

发表评论

最新留言

哈哈,博客排版真的漂亮呢~
[***.90.31.176]2024年04月10日 16时13分22秒