目标是根据数据库的菜单实现无限级别的菜单问题
/**
* 数据库基础菜单
*/
public class Menu {
private long id;
private long parentId;
private String name;
public Menu(long id, long parentId, String name) {
this.id = id;
this.parentId = parentId;
this.name = name;
}
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 class MenuBo {
private long id;
private String name;
private List<MenuBo> menuBoList;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<MenuBo> getMenuBoList() {
return menuBoList;
}
public void setMenuBoList(List<MenuBo> menuBoList) {
this.menuBoList = menuBoList;
}
}
import com.alibaba.fastjson.JSONObject;
import java.util.ArrayList;
import java.util.List;
public class Main {
public static void main(String[] args) {
List<Menu> list = new ArrayList<>();
Menu b = new Menu(1, 0, "主页");
Menu c = new Menu(2, 1, "分类1");
Menu d = new Menu(3, 1, "分类2");
Menu e = new Menu(4, 2, "分类1--子1");
Menu f = new Menu(5, 2, "分类1--子2");
Menu g = new Menu(6, 3, "分类2--子1");
Menu q = new Menu(7, 3, "分类2--子2");
Menu ff = new Menu(8, 7, "分类2--子2--1");
Menu ff1 = new Menu(9, 8, "分类2--子2--1--1");
list.add(b);
list.add(c);
list.add(d);
list.add(e);
list.add(f);
list.add(g);
list.add(q);
list.add(ff);
list.add(ff1);
List<MenuBo> menuBoList = toMenu(list);
Object menu = JSONObject.toJSON(menuBoList);
System.out.println(menu);
}
private static List<MenuBo> toMenu(List<Menu> list) {
List<MenuBo> newMenuList = new ArrayList<>();
for (int i = 0; i < list.size(); i++) {
if (list.get(i).getParentId() == 0) {
MenuBo menuBo = new MenuBo();
menuBo.setId(list.get(i).getId());
menuBo.setName(list.get(i).getName());
newMenuList.add(menuBo);
}
}
for (MenuBo node : newMenuList) {
List<MenuBo> child = getChild(node.getId(), list);
node.setMenuBoList(child);
}
return newMenuList;
}
/**
* @return
* @Author
* @Description //TODO 获取根节点的子节点
* @Param
*/
public static List<MenuBo> getChild(long id, List<Menu> allNode) {
//存放子菜单的集合
List<MenuBo> listChild = new ArrayList<>();
for (Menu node : allNode) {
if (node.getParentId() == id) {
MenuBo menuBo = new MenuBo();
menuBo.setId(node.getId());
menuBo.setName(node.getName());
listChild.add(menuBo);
}
}
//递归:
for (MenuBo node : listChild) {
node.setMenuBoList(getChild(node.getId(), allNode));
}
if (listChild.size() == 0) {
return null;
}
return listChild;
}
}