在JavaWeb的相关开发中经常会涉及到多级菜单的展示,为了方便菜单的管理需要使用数据库进行支持,本例采用相关算法讲数据库中的条形记录进行相关组装和排序讲菜单组装成树形结构。

首先是需要的JavaBean
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
/**
* <Description> 菜单扩展<br>
*/
public class MenuExt implements Serializable {
/**
* 菜单ID
*/
private Long id;
/**
* 菜单名称
*/
private String name;
/**
* 菜单地址
*/
private String url;
/**
* 菜单图标
*/
private String icon;
/**
* 父菜单ID
*/
private Long parentId;
/**
* 子菜单
*/
private List<MenuExt> children = new ArrayList<MenuExt>();
/**
* 菜单顺序
*/
private Integer ordby;
/**
* 菜单状态
*/
private String state;
//省略Getter和Setter
/**
*
* <Description> 孩子节点排序<br>
*
*/
public void sortChildren() {
Collections.sort(children, new Comparator<MenuExt>() {
@Override
public int compare(MenuExt menu1, MenuExt menu2) {
int result = 0;
Integer ordby1 = menu1.getOrdby();
Integer ordby2 = menu2.getOrdby();
Long id1 = menu1.getId();
Long id2 = menu2.getId();
if (null != ordby1 && null != ordby2) {
result = (ordby1 < ordby2 ? -1 : (ordby1 == ordby2 ? 0 : 1));
} else {
result = (id1 < id2 ? -1 : (id1 == id2 ? 0 : 1));
}
return result;
}
});
// 对每个节点的下一层节点进行排序
for (Iterator<MenuExt> it = children.iterator(); it.hasNext();) {
it.next().sortChildren();
}
}
public List<MenuExt> getChildren() {
return children;
}
public void setChildren(List<MenuExt> children) {
this.children = children;
}
}
Java算法
public static List<MenuExt> createTreeMenus(List<MenuExt> menus) {
List<MenuExt> treeMenus = null;
if (null != menus && !menus.isEmpty()) {
// 创建根节点
MenuExt root = new MenuExt();
root.setName("菜单根目录");
// 组装Map数据
Map<Long, MenuExt> dataMap = new HashMap<Long, MenuExt>();
for (MenuExt menu : menus) {
dataMap.put(menu.getId(), menu);
}
// 组装树形结构
Set<Entry<Long, MenuExt>> entrySet = dataMap.entrySet();
for (Entry<Long, MenuExt> entry : entrySet) {
MenuExt menu = entry.getValue();
if (null == menu.getParentId() || 0 == menu.getParentId()) {
root.getChildren().add(menu);
} else {
dataMap.get(menu.getParentId()).getChildren().add(menu);
}
}
// 对树形结构进行二叉树排序
root.sortChildren();
treeMenus = root.getChildren();
}
return treeMenus;
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# java树形结构代码
# java
# 树形结构
# 树形结构算法
# Java递归遍历树形结构的实现代码
# 使用递归删除树形结构的所有子节点(java和mysql实现)
# java实现省市区转换成树形结构
# Java实现树形结构的示例代码
# Java数据封装树形结构代码实例
# java转树形结构工具类详解
# 使用递归算法结合数据库解析成Java树形结构的代码解析
# 详解Java递归实现树形结构的两种方式
# Java接口返回省市区树形结构的实现
# 涉及到
# 数据库中
# 大家多多
# 本例
# 中经
# 下一层
# 二叉树
# private
# Long
# String
# id
# public
# children
# MenuExt
相关文章:
头像制作网站在线制作软件,dw网页背景图像怎么设置?
如何打造高效商业网站?建站目的决定转化率
高防服务器租用指南:配置选择与快速部署攻略
建站org新手必看:2024最新搭建流程与模板选择技巧
如何快速搭建响应式可视化网站?
如何在Golang中指定模块版本_使用go.mod控制版本号
非常酷的网站设计制作软件,酷培ai教育官方网站?
详解免费开源的DotNet二维码操作组件ThoughtWorks.QRCode(.NET组件介绍之四)
专业网站建设制作报价,网页设计制作要考什么证?
如何在阿里云购买域名并搭建网站?
如何配置WinSCP新建站点的密钥验证步骤?
网页制作模板网站推荐,网页设计海报之类的素材哪里好?
家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?
如何在宝塔面板中创建新站点?
定制建站如何定义?其核心优势是什么?
相亲简历制作网站推荐大全,新相亲大会主持人小萍萍资料?
阿里云网站制作公司,阿里云快速搭建网站好用吗?
如何配置IIS站点权限与局域网访问?
广州网站制作公司哪家好一点,广州欧莱雅百库网络科技有限公司官网?
东莞专业网站制作公司有哪些,东莞招聘网站哪个好?
建站之星2.7模板快速切换与批量管理功能操作指南
如何通过老薛主机一键快速建站?
制作企业网站建设方案,怎样建设一个公司网站?
巅云智能建站系统:可视化拖拽+多端适配+免费模板一键生成
网站制作专业公司有哪些,如何制作一个企业网站,建设网站的基本步骤有哪些?
孙琪峥织梦建站教程如何优化数据库安全?
建站10G流量真的够用吗?如何应对访问高峰?
制作宣传网站的软件,小红书可以宣传网站吗?
建站之星展会模版如何一键下载生成?
大学网站设计制作软件有哪些,如何将网站制作成自己app?
在线制作视频网站免费,都有哪些好的动漫网站?
建站之星安装模板失败:服务器环境不兼容?
英语简历制作免费网站推荐,如何将简历翻译成英文?
高防服务器如何保障网站安全无虞?
如何快速查询网址的建站时间与历史轨迹?
,柠檬视频怎样兑换vip?
免费制作海报的网站,哪位做平面的朋友告诉我用什么软件做海报比较好?ps还是cd还是ai这几个软件我都会些我是做网页的?
子杰智能建站系统|零代码开发与AI生成SEO优化指南
如何高效搭建专业期货交易平台网站?
公司网站制作需要多少钱,找人做公司网站需要多少钱?
内部网站制作流程,如何建立公司内部网站?
建站主机核心功能解析:服务器选择与网站搭建流程指南
内网网站制作软件,内网的网站如何发布到外网?
如何用西部建站助手快速创建专业网站?
如何撰写建站申请书?关键要点有哪些?
如何挑选高效建站主机与优质域名?
建站主机解析:虚拟主机配置与服务器选择指南
如何快速上传建站程序避免常见错误?
桂林网站制作公司有哪些,桂林马拉松怎么报名?
香港服务器网站卡顿?如何解决网络延迟与负载问题?
*请认真填写需求信息,我们会在24小时内与您取得联系。