Java web多级菜单HTML模板,JavaWeb - 多级菜单、分组嵌套“递归”写法

该博客介绍了一种使用Java处理分组数据层级的方法,通过查询所有分组并利用临时Map存储父子关系,实现了快速定位和构建分层结构。主要涉及Java编程、数据分组、层级处理和数据库操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

设计思路:最简单的查询全部分组数据,然后通过 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;

3981772dea9249e586262747d595ee77.jpg

伪代码

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

*/

@Override

public 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;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值