这篇文章主要介绍了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构建树形菜单以及支持多级菜单的实例代码相关推荐

  1. java 树状 子节点_java构建树形列表(带children属性)

    /*** 树形表格工具类 * *@authoryanggb*/ public classTreeTableUtil {/*** 把列表转换为树结构 * *@paramoriginalList 原始li ...

  2. java去字符串中空行_java去掉文本中多余的空格与空行实例代码

    前言 最近因为工作的需要,在开发一个小型的圈子系统.功能类似一个简化的微博.用户可以在圈子里发帖子,回复帖子,点赞等等.项目上线不久就发现有很多用户在圈子里发广告,手段之丰富令人叹为观止啊.产品大哥昨 ...

  3. java树形菜单_Java构建树形菜单

    构建树形菜单 效果图:支持多级菜单. 菜单实体类: public class Menu { // 菜单id private String id; // 菜单名称 private String name ...

  4. java递归基础掉用_Java递归基础

    java递归基础掉用 对于那些不知道递归是什么的人(并且像个大笑者一样),请单击以下链接:Google搜索:递归,然后单击"您的意思是--"项. 希望您终于弄清楚了递归是指其自身的 ...

  5. java 文件下载详解_Java 从网上下载文件的几种方式实例代码详解

    废话不多说了,直接给大家贴代码了,具体代码如下所示: package com.github.pandafang.tool; import java.io.BufferedOutputStream; i ...

  6. java 采样_Java编程实现beta分布的采样或抽样实例代码

    本文研究的主要是Java编程实现beta分布的采样或抽样,具体如下. 本文将使用math3提供的工具包,对beta分布进行采样.如下程序是对alpha=81,beta=219的beta分布函数,进行抽 ...

  7. java集合中取最大值_Java后台通过Collections获取list集合中最大数,最小数代码

    我就废话不多说了,大家还是直接看代码吧~ package com.jalor; import java.util.ArrayList; import java.util.Collections; im ...

  8. java整形变量转换字符串_JAVA整型转换字符串以及相互转换的相关实例

    JAVA整型转换字符串以及相互转换的相关实例.java数据类型之间的转换.怎么把整数 int 转换成字串 String ?怎么把字符串 String 转换成整数 int类型? 整型与字符串转换实例: ...

  9. java 递归遍历对象所有属性_Java学习之Xml系列二:xml按条件查询、xml递归遍历所有元素和属性...

    xml中加入了几条,为了方便查询时作为示例. 话不多说见代码注释: DTD文件:SwordTypeDefinition.dtd XML文件:SwordLib.xml SwordLibrary SYST ...

最新文章

  1. markdown自动生成侧边栏TOC /目录
  2. mysql 的 前导零_将前导零添加到MySQL列?
  3. moment 当前日期
  4. Gson简要使用笔记
  5. Securing the Deep Learning Stack
  6. 窗体的布局 1124
  7. CLion 下使用 Valgrind 内存检查 [Mac;Linux;Window多平台]
  8. LTE学习:空口降低时延关键技术
  9. 表中存在类型为dateTime的字段,并且插入语句,不包括该字段时,会插入失败...
  10. Sending form data
  11. mysql(一主从从)
  12. MySQL从入门到精通详细教程
  13. 目标跟踪之MOSSE算法(C++版本配置及原理简介)
  14. AdminLTE登录页设置背景图片
  15. 服务器属于网络计算机,服务器它到底是什么,和电脑又有什么区别
  16. 31页智慧文旅云服务平台建设方案【附下载】
  17. Spring Boot 2 基础篇学习笔记
  18. 论文研读-基于决策变量分析的大规模多目标进化算法
  19. 用apktool反编译,修改添加smali文, 再打包apk遇到的64k问题的解决方法 Unsigned short value out of range: 65536
  20. RHEL7升级内核版本

热门文章

  1. 树1 树的同构_检查树是否同构
  2. 字符串的回文子序列个数_计算给定字符串中回文子序列的数量
  3. scala中的二维数组_Scala中的多维数组
  4. vb mysql 表格显示,在VB中编辑数据库和电子表格
  5. python—列表、字典生成式
  6. 基于Python的应用程序的虚拟环境
  7. c# 赋值运算符_C#程序演示赋值运算符的示例
  8. Redis 如何实现分布式锁?
  9. 第 6-5 课:MyBatis 核心和面试题(下)
  10. MySQL 面试,必须掌握的 8 大核心点