java递归实现多级菜单栏_Java构建树形菜单以及支持多级菜单的实例代码
这篇文章主要介绍了Java构建树形菜单的实例代码(支持多级菜单),非常不错,具有参考借鉴价值,需要的朋友可以参考下
效果图:支持多级菜单。
菜单实体类:
public class Menu {
// 菜单id
private String id;
// 菜单名称
private String name;
// 父菜单id
private String parentId;
// 菜单url
private String url;
// 菜单图标
private String icon;
// 菜单顺序
private int order;
// 子菜单
private List
// ... 省去getter和setter方法以及toString方法
}
菜单一般需要排序,我们根据Menu的order字段进行排序:
/*
* 排序,根据order排序
*/
public Comparator
Comparator
@Override
public int compare(Menu o1, Menu o2) {
if(o1.getOrder() != o2.getOrder()){
return o1.getOrder() - o2.getOrder();
}
return 0;
}
};
return comparator;
}
生成树的方法:
public Map findTree(){
Map data = new HashMap();
try {//查询所有菜单
List
//根节点
List
for (Menu nav : allMenu) {
if(nav.getParentId().equals("0")){//父节点是0的,为根节点。
rootMenu.add(nav);
}
}
/* 根据Menu类的order排序 */
Collections.sort(rootMenu, order());
//为根菜单设置子菜单,getClild是递归调用的
for (Menu nav : rootMenu) {
/* 获取根节点下的所有子节点 使用getChild方法*/
List
nav.setChildren(childList);//给根节点设置子节点
}
/**
* 输出构建好的菜单数据。
*
*/
data.put("success", "true");
data.put("list", rootMenu);
return data;
} catch (Exception e) {
data.put("success", "false");
data.put("list", new ArrayList());
return data;
}
}
获取子菜单:
/**
* 获取子节点
* @param id 父节点id
* @param allMenu 所有菜单列表
* @return 每个根节点下,所有子菜单列表
*/
public List
//子菜单
List
for (Menu nav : allMenu) {
// 遍历所有节点,将所有菜单的父id与传过来的根节点的id比较
//相等说明:为该根节点的子节点。
if(nav.ParentId().equals(id)){
childList.add(nav);
}
}
//递归
for (Menu nav : childList) {
nav.setChildren(getChild(nav.getId(), allMenu));
}
Collections.sort(childList,order());//排序
//如果节点下没有子节点,返回一个空List(递归退出)
if(childList.size() == 0){
return new ArrayList
}
return childList;
}
最后返回的JSON串如下:
{
"success": "true",
"list": [
{
"id": "1",
"name": "Java",
"parentid": "0",
"url": "http://www.aliouchen.com",
"order": 1,
"children": [
{
"id": "2",
"name": "并发编程",
"parentid": "1",
"url": "http://www.aliouchen.com",
"order": 1,
"children": []
},
{
"id": "3",
"name": "多线程",
"parentid": "1",
"url": "http://www.aliouchen.com",
"order": 2,
"children": [
"id": "4",
"name": "Thread",
"parentid": "3",
"url": "http://www.aliouchen.com",
"order": 1,
"children":[]
]
}
]
},
{
"id": "5",
"name": "Python",
"parentid": "0",
"url": "http://www.aliouchen.com",
"order": 2,
"children": []
}
]
}
总结
java递归实现多级菜单栏_Java构建树形菜单以及支持多级菜单的实例代码相关推荐
- java 树状 子节点_java构建树形列表(带children属性)
/*** 树形表格工具类 * *@authoryanggb*/ public classTreeTableUtil {/*** 把列表转换为树结构 * *@paramoriginalList 原始li ...
- java去字符串中空行_java去掉文本中多余的空格与空行实例代码
前言 最近因为工作的需要,在开发一个小型的圈子系统.功能类似一个简化的微博.用户可以在圈子里发帖子,回复帖子,点赞等等.项目上线不久就发现有很多用户在圈子里发广告,手段之丰富令人叹为观止啊.产品大哥昨 ...
- java树形菜单_Java构建树形菜单
构建树形菜单 效果图:支持多级菜单. 菜单实体类: public class Menu { // 菜单id private String id; // 菜单名称 private String name ...
- java递归基础掉用_Java递归基础
java递归基础掉用 对于那些不知道递归是什么的人(并且像个大笑者一样),请单击以下链接:Google搜索:递归,然后单击"您的意思是--"项. 希望您终于弄清楚了递归是指其自身的 ...
- java 文件下载详解_Java 从网上下载文件的几种方式实例代码详解
废话不多说了,直接给大家贴代码了,具体代码如下所示: package com.github.pandafang.tool; import java.io.BufferedOutputStream; i ...
- java 采样_Java编程实现beta分布的采样或抽样实例代码
本文研究的主要是Java编程实现beta分布的采样或抽样,具体如下. 本文将使用math3提供的工具包,对beta分布进行采样.如下程序是对alpha=81,beta=219的beta分布函数,进行抽 ...
- java集合中取最大值_Java后台通过Collections获取list集合中最大数,最小数代码
我就废话不多说了,大家还是直接看代码吧~ package com.jalor; import java.util.ArrayList; import java.util.Collections; im ...
- java整形变量转换字符串_JAVA整型转换字符串以及相互转换的相关实例
JAVA整型转换字符串以及相互转换的相关实例.java数据类型之间的转换.怎么把整数 int 转换成字串 String ?怎么把字符串 String 转换成整数 int类型? 整型与字符串转换实例: ...
- java 递归遍历对象所有属性_Java学习之Xml系列二:xml按条件查询、xml递归遍历所有元素和属性...
xml中加入了几条,为了方便查询时作为示例. 话不多说见代码注释: DTD文件:SwordTypeDefinition.dtd XML文件:SwordLib.xml SwordLibrary SYST ...
最新文章
- markdown自动生成侧边栏TOC /目录
- mysql 的 前导零_将前导零添加到MySQL列?
- moment 当前日期
- Gson简要使用笔记
- Securing the Deep Learning Stack
- 窗体的布局 1124
- CLion 下使用 Valgrind 内存检查 [Mac;Linux;Window多平台]
- LTE学习:空口降低时延关键技术
- 表中存在类型为dateTime的字段,并且插入语句,不包括该字段时,会插入失败...
- Sending form data
- mysql(一主从从)
- MySQL从入门到精通详细教程
- 目标跟踪之MOSSE算法(C++版本配置及原理简介)
- AdminLTE登录页设置背景图片
- 服务器属于网络计算机,服务器它到底是什么,和电脑又有什么区别
- 31页智慧文旅云服务平台建设方案【附下载】
- Spring Boot 2 基础篇学习笔记
- 论文研读-基于决策变量分析的大规模多目标进化算法
- 用apktool反编译,修改添加smali文, 再打包apk遇到的64k问题的解决方法 Unsigned short value out of range: 65536
- RHEL7升级内核版本