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