java构建树形菜单递归工具类
1.设计菜单实体
import java.util.List;
public class Menu {
//菜单id
private Long id;
//父节点id
private Long parentId;
//菜单名称
private String name;
//对应路径
private String url;
//图标
private String icon;
//是否选中
private boolean selected;
private List<Menu> childrens;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Long getParentId() {
return parentId;
}
public void setParentId(Long parentId) {
this.parentId = parentId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getIcon() {
return icon;
}
public void setIcon(String icon) {
this.icon = icon;
}
public boolean isSelected() {
return selected;
}
public void setSelected(boolean selected) {
this.selected = selected;
}
public List<Menu> getChildrens() {
return childrens;
}
public void setChildrens(List<Menu> childrens) {
this.childrens = childrens;
}
}
2.工具类如下:
import java.util.ArrayList;
import java.util.List; import com.alibaba.fastjson.JSONObject;
/**
* 构建树形菜单
* MenuUtils
* @author lishang
* 2018年8月30日
*/
public class MenuUtils {
/**
* 针对二级菜单
* treeMenuList:( ). <br/>
* @author lishang
* @param sourceList
* @return
*/
public static List<Menu> treeMenuList(List<Menu> sourceList){
List<Menu> targetList=new ArrayList<>();
if (sourceList==null) {
return null;
}
List<Menu> pmenus=new ArrayList<>();
for (Menu menu : sourceList) {
if(menu.getParentId()==0l||menu==null){
pmenus.add(menu);
}
}
sourceList.removeAll(pmenus);
for (int i = 0; i < pmenus.size(); i++) {
Menu pmenu=pmenus.get(i);
List<Menu> cmenus=new ArrayList<>();
for (Menu menu : sourceList) {
if(pmenu.getId().equals(menu.getParentId())){
cmenus.add(menu);
}
}
pmenu.setChildrens(cmenus);
sourceList.removeAll(cmenus);
}
return targetList;
} public static List<Menu> treeRoot(List<Menu> sourceList){ return sourceList;
} /**
* 递归获取菜单
* treeRoot:( ). <br/>
* @author lishang
* @param sourceList
* @param rootMenu
* @return
*/
public static Menu treeRoot(List<Menu> sourceList,Menu rootMenu)
{
if (sourceList == null)
{
return null;
}
List<Menu> childList=new ArrayList<>();
for (Menu menu : sourceList) {
if(rootMenu.getId().equals(menu.getParentId())){
Menu menuChild = treeRoot(sourceList, menu);
childList.add(menuChild);
}
}
if(childList.size()==0){
return rootMenu;
}
rootMenu.setChildrens(childList);
return rootMenu;
} public static void main(String[] args) {
List<Menu> sourceList=new ArrayList<>(); Menu menu=new Menu();
menu.setParentId(0l);
menu.setId(1l);
menu.setName("菜单一级");
sourceList.add(menu); Menu menu2=new Menu();
menu2.setParentId(1l);
menu2.setId(2l);
menu2.setName("菜单二级1");
sourceList.add(menu2); Menu menu3=new Menu();
menu3.setParentId(2l);
menu3.setId(3l);
menu3.setName("菜单三级");
sourceList.add(menu3); Menu menu4=new Menu();
menu4.setParentId(3l);
menu4.setId(4l);
menu4.setName("菜单四级");
sourceList.add(menu4); Menu menu5=new Menu();
menu5.setParentId(1l);
menu5.setId(6l);
menu5.setName("菜单二级2");
sourceList.add(menu5); Menu childrens = treeRoot(sourceList, menu);
System.out.println(JSONObject.toJSON(childrens));
} }
import java.util.List;
public class Menu {
//菜单id
private Long id;
//父节点id
private Long parentId;
//菜单名称
private String name;
//对应路径
private String url;
//图标
private String icon;
//是否选中
private boolean selected;
private List<Menu> childrens;
public Long getId() {
return id;
}
public void setId(Long id) {
this.id = id;
}
public Long getParentId() {
return parentId;
}
public void setParentId(Long parentId) {
this.parentId = parentId;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getUrl() {
return url;
}
public void setUrl(String url) {
this.url = url;
}
public String getIcon() {
return icon;
}
public void setIcon(String icon) {
this.icon = icon;
}
public boolean isSelected() {
return selected;
}
public void setSelected(boolean selected) {
this.selected = selected;
}
public List<Menu> getChildrens() {
return childrens;
}
public void setChildrens(List<Menu> childrens) {
this.childrens = childrens;
}
}
java构建树形菜单递归工具类的更多相关文章
- Java操作文件夹的工具类
Java操作文件夹的工具类 import java.io.File; public class DeleteDirectory { /** * 删除单个文件 * @param fileName 要删除 ...
- 【转】Java压缩和解压文件工具类ZipUtil
特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/ ...
- Java汉字转成汉语拼音工具类
Java汉字转成汉语拼音工具类,需要用到pinyin4j.jar包. import net.sourceforge.pinyin4j.PinyinHelper; import net.sourcefo ...
- java中excel导入\导出工具类
1.导入工具 package com.linrain.jcs.test; import jxl.Cell; import jxl.Sheet; import jxl.Workbook; import ...
- java中定义一个CloneUtil 工具类
其实所有的java对象都可以具备克隆能力,只是因为在基础类Object中被设定成了一个保留方法(protected),要想真正拥有克隆的能力, 就需要实现Cloneable接口,重写clone方法.通 ...
- java代码行数统计工具类
package com.syl.demo.test; import java.io.*; /** * java代码行数统计工具类 * Created by 孙义朗 on 2017/11/17 0017 ...
- Java加载Properties配置文件工具类
Java加载Properties配置文件工具类 import org.apache.commons.lang3.StringUtils; import org.apache.log4j.Logger; ...
- Java 操作Redis封装RedisTemplate工具类
package com.example.redisdistlock.util; import org.springframework.beans.factory.annotation.Autowire ...
- java后台表单验证工具类
/** * 描述 java后台表单验证工具类 * * @ClassName ValidationUtil * @Author wzf * @DATE 2018/10/27 15:21 * @VerSi ...
随机推荐
- 服务主机superFetch占用磁盘过多
有用户升级到Win10系统后,发现系统运行不快,查看任务管理器中正在运行的进程,然后查看到有一个名称为“服务主机:本地系统(网络受限)”的进程的磁盘占用率很高.如果想要解决这个问题,那么不妨参考下面介 ...
- 实现硬件PWM控制电机旋转和通过编码器计算所转圈数的简单例程
该例程所用的硬件设备: 直流电机驱动模块YYH-LWZ: H桥 大功率 正反转 刹车 PWM 调速 5/12/24V 12V直流减速电机JGB37-520B:ASLONG JGB37-520B编码器减 ...
- 如何激活已经运行过的Activity, 而不是重新启动新的Activity
Intent i=new Intent(this,Activity1.class); i.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT); st ...
- Java框架spring 学习笔记(五):Bean定义继承
子 bean 的定义继承父定义的配置数据.子定义可以根据需要重写一些值,或者添加其他值. 编写HelloWorld.java package com.example.spring; public cl ...
- 《CSAPP》读书笔记
第一章 第二章 第三章 第四章 第五章 第六章 第七章 链接 可重定位目标文件 符号和符号表 符号解析 第八章 第九章 虚拟存储器 虚拟存储器 页表.页命中.缺页 地址翻译 第十章 第十一章 第十二章 ...
- windows内核驱动内存管理之Lookaside使用
Windows内存管理中使用了类似于容器的东西,叫做Lookaside对象,每次程序员申请内存都会从Lookaside里面申请,只有不足的时候,Lookaside才会向内存又一次申请内存空间,这样减少 ...
- tensorflow源码阅读(c++)(一)
root/tensorflow/core |--common_runtime # 公共运行库 |--distributed_runtime # 分布式执行模块,含有grpc session, grpc ...
- redis缓存雪崩、穿透、击穿概念及解决办法
缓存雪崩 对于系统 A,假设每天高峰期每秒 5000 个请求,本来缓存在高峰期可以扛住每秒 4000 个请求,但是缓存机器意外发生了全盘宕机.缓存挂了,此时 1 秒 5000 个请求全部落数据库,数据 ...
- Dockerfile的alpine时区设置
FROM *** RUN apk add -U tzdataRUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
- centos7 使用kubeadm 快速部署 kubernetes 国内源
前言 搭建kubernetes时看文档以及资料走了很多弯路,so 整理了最后成功安装的过程已做记录.网上的搭建文章总是少一些步骤,想本人这样的小白总是部署不成功(^_^). 准备两台或两台以上的虚拟机 ...