在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
相关文章:
网站制作培训多少钱一个月,网站优化seo培训课程有哪些?
网站制作费用多少钱,一个网站的运营,需要哪些费用?
建站之星好吗?新手能否轻松上手建站?
开心动漫网站制作软件下载,十分开心动画为何停播?
如何设计高效校园网站?
企业网站制作费用多少,企业网站空间一般需要多大,费用是多少?
PHP正则匹配日期和时间(时间戳转换)的实例代码
海南网站制作公司有哪些,海口网是哪家的?
我的世界制作壁纸网站下载,手机怎么换我的世界壁纸?
高防服务器:AI智能防御DDoS攻击与数据安全保障
如何挑选最适合建站的高性能VPS主机?
TestNG的testng.xml配置文件怎么写
外汇网站制作流程,如何在工商银行网站上做外汇买卖?
建站之星后台密码遗忘或太弱?如何重置与强化?
如何在万网自助建站中设置域名及备案?
如何通过建站之星自助学习解决操作问题?
建站之星如何防范黑客攻击与数据泄露?
广平建站公司哪家专业可靠?如何选择?
江苏网站制作公司有哪些,江苏书法考级官方网站?
招贴海报怎么做,什么是海报招贴?
如何高效生成建站之星成品网站源码?
官网自助建站平台指南:在线制作、快速建站与模板选择全解析
如何快速搭建高效简练网站?
网站制作网站,深圳做网站哪家比较好?
如何用PHP快速搭建高效网站?分步指南
如何在阿里云部署织梦网站?
网站设计制作公司地址,网站建设比较好的公司都有哪些?
建站之星后台管理如何实现高效配置?
建站之星客服服务时间及联系方式如何?
高端网站建设与定制开发一站式解决方案 中企动力
深圳网站制作设计招聘,关于服装设计的流行趋势,哪里的资料比较全面?
如何用虚拟主机快速搭建网站?详细步骤解析
如何批量查询域名的建站时间记录?
成都网站制作价格表,现在成都广电的单独网络宽带有多少的,资费是什么情况呢?
测试制作网站有哪些,测试性取向的权威测试或者网站?
建站之星展会模版如何一键下载生成?
建站主机CVM配置优化、SEO策略与性能提升指南
制作无缝贴图网站有哪些,3dmax无缝贴图怎么调?
Python如何创建带属性的XML节点
如何在自有机房高效搭建专业网站?
如何在阿里云通过域名搭建网站?
如何选择PHP开源工具快速搭建网站?
网站好制作吗知乎,网站开发好学吗?有什么技巧?
c# 在高并发下使用反射发射(Reflection.Emit)的性能
娃派WAP自助建站:免费模板+移动优化,快速打造专业网站
建设网站制作价格,怎样建立自己的公司网站?
佛山企业网站制作公司有哪些,沟通100网上服务官网?
如何高效配置IIS服务器搭建网站?
厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?
定制建站哪家更专业可靠?推荐榜单揭晓
*请认真填写需求信息,我们会在24小时内与您取得联系。