1.定义菜单实体类
package com.greewon.po;
/**
* @author TANGSHUAI
* @date 2021年4月2日 上午10:15:02
*
*/
import java.util.List;
public class Menus {
//菜单id
private Integer id;
//菜单名称
private String name;
//父级菜单,0为最高级
private Integer perentid;
//子菜单
List<Menus> children;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getPerentid() {
return perentid;
}
public void setPerentid(Integer perentid) {
this.perentid = perentid;
}
public List<Menus> getChildren() {
return children;
}
public void setChildren(List<Menus> children) {
this.children = children;
}
@Override
public String toString() {
return "Menus [id=" + id + ", name=" + name + ", perentid=" + perentid + ", children=" + children + "]";
}
}
2.模拟测试数据
package com.mythread;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import com.greewon.po.Menus;
/**
* @author TANGSHUAI
* @date 2021年4月2日 上午10:18:57
* 递归查询菜单列表
*/
public class TestMenus {
public static void main(String[] args) {
Menus menus=new Menus();
menus.setId(1);
menus.setName("一级菜单");
menus.setPerentid(0);
Menus menu2=new Menus();
menu2.setId(2);
menu2.setName("一级菜单");
menu2.setPerentid(0);
Menus menus3=new Menus();
menus3.setId(3);
menus3.setName("二级菜单");
menus3.setPerentid(1);
Menus menus4=new Menus();
menus4.setId(4);
menus4.setName("三级菜单");
menus4.setPerentid(3);
List<Menus> list=new ArrayList<Menus>();
list.add(menus);
list.add(menu2);
list.add(menus3);
list.add(menus4);
//递归查询
List<Menus> collect = list.stream().filter(m->m.getPerentid()==0).map(m->{
m.setChildren(getMenus(m,list));
return m;
}).collect(Collectors.toList());
System.out.println(collect);
}
//递归查询方法
public static List<Menus> getMenus(Menus menu,List<Menus> list){
List<Menus> collect = list.stream().filter(m->{
//匹配菜单与之对应的子菜单
return m.getPerentid()==menu.getId();
}).map(m->{
//将子菜单保存到父菜单
m.setChildren(getMenus(m,list));
return m;
}).collect(Collectors.toList());
return collect;
}
}
3.运行结果
[Menus [id=1, name=一级菜单, perentid=0, children=[Menus [id=3, name=二级菜单, perentid=1, children=[Menus [id=4, name=三级菜单, perentid=3, children=[]]]]]], Menus [id=2, name=一级菜单, perentid=0, children=[]]]