import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* 树形菜单demo
* @author Jason
* @date
*/
public class TreeMain {
private List<Menu> menus;
public TreeMain() {
menus = new ArrayList<Menu>();
Menu menu = new Menu();
menu.setId("1");
menu.setName("一级菜单A");
menu.setParentId(null);
menus.add(menu);
Menu menu2 = new Menu();
menu2.setId("2");
menu2.setName("一级菜单B");
menu2.setParentId(null);
menus.add(menu2);
Menu menu3 = new Menu();
menu3.setId("3");
menu3.setName("一级菜单C");
menu3.setParentId(null);
menus.add(menu3);
Menu menu4 = new Menu();
menu4.setId("4");
menu4.setName("一级菜单A__1");
menu4.setParentId("1");
menus.add(menu4);
Menu menu5 = new Menu();
menu5.setId("5");
menu5.setName("一级菜单A__2");
menu5.setParentId("1");
menus.add(menu5);
Menu menu6 = new Menu();
menu6.setId("6");
menu6.setName("二级菜单A__1");
menu6.setParentId("2");
menus.add(menu6);
Menu menu7 = new Menu();
menu7.setId("7");
menu7.setName("二级菜单A__2");
menu7.setParentId("2");
menus.add(menu7);
Menu menu8 = new Menu();
menu8.setId("8");
menu8.setName("二级菜单A__3");
menu8.setParentId("2");
menus.add(menu7);
}
public static void main(String[] args) {
TreeMain main = new TreeMain();
main.buildTree();
}
public void buildTree(){
Map<Menu, List<Menu>> menuMap = new HashMap<Menu, List<Menu>>();
for (Menu menu : menus) {
if (menu.getParentId() == null) {
List<Menu> menuList = build(menu);
menuMap.put(menu, menuList);
}
}
for (Map.Entry<Menu, List<Menu>> entry : menuMap.entrySet()) {
System.out.println("=="+entry.getKey().getName());
for(Menu menu :entry.getValue()) {
System.out.println("----"+menu.getName());
}
}
}
/**
* 递归遍历菜单
* @param menu
* @return
*/
private List<Menu> build(Menu menu){
List<Menu> menuList = new ArrayList<Menu>();
List<Menu> children = getChildren(menu);
if (!children.isEmpty()) {
for (Menu child : children) {
//String id = child.getId();
menuList.add(child);
//build(child);
}
}
return menuList;
}
private List<Menu> getChildren(Menu menu){
List<Menu> children = new ArrayList<Menu>();
String id = menu.getId();
for (Menu child : menus) {
if (id.equals(child.getParentId())) { //获取子菜单
children.add(child);
}
}
return children;
}
}
输出结果:
==一级菜单A
----一级菜单A__1
----一级菜单A__2
==一级菜单B
----二级菜单A__1
----二级菜单A__2
----二级菜单A__2
==一级菜单C