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构建树形菜单递归工具类的更多相关文章

  1. Java操作文件夹的工具类

    Java操作文件夹的工具类 import java.io.File; public class DeleteDirectory { /** * 删除单个文件 * @param fileName 要删除 ...

  2. 【转】Java压缩和解压文件工具类ZipUtil

    特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/ ...

  3. Java汉字转成汉语拼音工具类

    Java汉字转成汉语拼音工具类,需要用到pinyin4j.jar包. import net.sourceforge.pinyin4j.PinyinHelper; import net.sourcefo ...

  4. java中excel导入\导出工具类

    1.导入工具 package com.linrain.jcs.test; import jxl.Cell; import jxl.Sheet; import jxl.Workbook; import ...

  5. java中定义一个CloneUtil 工具类

    其实所有的java对象都可以具备克隆能力,只是因为在基础类Object中被设定成了一个保留方法(protected),要想真正拥有克隆的能力, 就需要实现Cloneable接口,重写clone方法.通 ...

  6. java代码行数统计工具类

    package com.syl.demo.test; import java.io.*; /** * java代码行数统计工具类 * Created by 孙义朗 on 2017/11/17 0017 ...

  7. Java加载Properties配置文件工具类

    Java加载Properties配置文件工具类 import org.apache.commons.lang3.StringUtils; import org.apache.log4j.Logger; ...

  8. Java 操作Redis封装RedisTemplate工具类

    package com.example.redisdistlock.util; import org.springframework.beans.factory.annotation.Autowire ...

  9. java后台表单验证工具类

    /** * 描述 java后台表单验证工具类 * * @ClassName ValidationUtil * @Author wzf * @DATE 2018/10/27 15:21 * @VerSi ...

随机推荐

  1. Mysql出现(10061)错误提示的暴力解决办法

    上个月我还在说别人的怎么老是会错呢,我的就没事,嘿 今天就轮到我了 我发誓 我绝对没碰它 是它先动的手 言归正传   下面给你们 介绍 终极大招  为什么是终极大招呢  因为网上那些前辈们的方法我都试 ...

  2. linux下open-vswitch安装卸载操作

    一. ovs 从源码编译安装: 安装依赖项: ? 1 2 3 4 5 6 7 8 9 10 11 # apt install make # apt install gcc # apt install ...

  3. React—Native开发之 Could not connect to development server(Android)解决方法

    作为初学者昨天还好好能跑的项目今天就会遇到突然爆红出错是经常的事,让我们来看下是什么错吧 先来翻译: 连接不到开发的服务器. 请按照以下的步骤来修复此问题: 确保包服务器在运行确保你的设备或者模拟器连 ...

  4. python之元组及其方法---整理集

    元组: 区别:与列表类似,是对列表的二次加工:用小括号包括起来:元素不可修改:不可增加.删除 技巧:创建元组的时候,一般在最后一个元素后面加一个逗号:为了与方法区分:并且这个逗号不算元素例如: tu= ...

  5. ./configure -build,-host,-target设置

    build:执行代码编译的主机,正常的话就是你的主机系统.这个参数一般由config.guess来猜就可以.当然自己指定也可以.host:编译出来的二进制程序所执行的主机,因为绝大多数是如果本机编译, ...

  6. Hadoop2.7.7_HA高可用部署

    1. Hadoop的HA机制 前言:正式引入HA机制是从hadoop2.0开始,之前的版本中没有HA机制 1.1. HA的运作机制 (1)hadoop-HA集群运作机制介绍 所谓HA,即高可用(7*2 ...

  7. [ArcGIS]ArcGIS Server环境搭建,发布服务,以及使用ArcGIS API for JavaScript

    环境搭建 安装Web服务器 IIS 控制面板-程序-程序和功能-启用或关闭Windows功能,勾选以下 安装VisualStudio,选择包括ASP.NET模块 安装ArcGIS服务器 ArcGIS ...

  8. iTerm2使用技巧

    iTerm2实用技巧 搜索及文本复制 使用“cmd+f”可以调出搜索框进行文本搜索,然后有个很奇妙的快捷键“tab”键,使用它后会自动高亮当前文本后面的内容.最后按enter键将高亮文本复制到剪切板上 ...

  9. 【转载】在linux下别用zip 用tar来压缩文件 zip解压后还是utf-8 window10是GBK

    3.2 使用 unzip 命令解压缩 zip 文件 将 shiyanlou.zip 解压到当前目录:   $ unzip shiyanlou.zip 使用安静模式,将文件解压到指定目录:   $ un ...

  10. IIS发布MVC ASP.NET网站

    发布网站后,发现无法访问,最后在配置文件上添加一段: <system.codedom> <compilers> <compiler language="c#;c ...