package com.test.mySpringmvc.javaUplode;
import java.util.List;
/**
* @Class Name Menu
* @Author sumeimei
* @Create In Mar 27, 2019
*/
public class Menu {
//菜单id
private Long id;
//父节点id
private Long parentId;
//菜单名称
private String name;
//是否选中
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 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;
}
}
package com.test.mySpringmvc.javaUplode;
import java.util.ArrayList;
import java.util.List;
import com.alibaba.fastjson.JSONObject;
/** 构建树形菜单
* @Class Name MenuUtils
* @Author sumeimei
* @Create In Mar 27, 2019
*/
public class MenuUtils {
/**
* 针对二级菜单
* Name treeMenuList
* @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;
}
/**
* 递归获取菜单
* Name treeRoot
* @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;
}
//test
public static void main(String[] args) {
List<Menu> sourceList=new ArrayList<>();
Menu menu=new Menu();
menu.setName("菜单1级");
menu.setParentId(0l);
menu.setId(1l);
sourceList.add(menu);
Menu menu2=new Menu();
menu2.setName("菜单2级1");
menu2.setParentId(1l);
menu2.setId(2l);
sourceList.add(menu2);
Menu menu3=new Menu();
menu3.setName("菜单3级");
menu3.setParentId(2l);
menu3.setId(3l);
sourceList.add(menu3);
Menu menu4=new Menu();
menu4.setName("菜单4级");
menu4.setParentId(3l);
menu4.setId(4l);
sourceList.add(menu4);
Menu menu4_1=new Menu();
menu4_1.setName("菜单4_1级");
menu4_1.setParentId(3l);
menu4_1.setId(4_1l);
sourceList.add(menu4_1);
Menu menu5=new Menu();
menu5.setName("菜单2级2");
menu5.setParentId(1l);
menu5.setId(6l);
sourceList.add(menu5);
Menu childrens = treeRoot(sourceList, menu);
System.out.println(JSONObject.toJSON(childrens));
}
}
效果:
{ "name": "菜单1级", "id": 1, "childrens": [ { "name": "菜单2级1", "id": 2, "childrens": [ { "name": "菜单3级", "id": 3, "childrens": [ { "name": "菜单4级", "id": 4, "parentId": 3, "selected": false }, { "name": "菜单4_1级", "id": 41, "parentId": 3, "selected": false } ], "parentId": 2, "selected": false } ], "parentId": 1, "selected": false }, { "name": "菜单2级2", "id": 6, "parentId": 1, "selected": false } ], "parentId": 0, "selected": false }