生成菜单树
public class MenuTreeGenerator { public static void main(String[] args) { Map<String, Menu> map; MenuTreeGenerator menuTreeGenerator = new MenuTreeGenerator(); List<Menu> allMenuEntities = menuTreeGenerator.getAllMenuEntities(); //list转map map = allMenuEntities.stream().collect(Collectors.toMap(Menu::getId, a -> a, (k1, k2) -> k1)); System.out.println(menuTreeGenerator.getTreeMenu(allMenuEntities, map)); //打印:[menu{id:1,parentId:null,childMenus:[menu{id:11,parentId:1,childMenus:[menu{id:111,parentId:11,childMenus:[]}]}, menu{id:12,parentId:1,childMenus:[]}]}, menu{id:2,parentId:null,childMenus:[menu{id:21,parentId:2,childMenus:[]}]}] } public List<Menu> getTreeMenu(List<Menu> allMenuEntities, Map<String, Menu> map) { List<Menu> treeMenu = new ArrayList<>(); for (Menu menu : allMenuEntities) { if (StringUtils.isEmpty(menu.getParentId())) { treeMenu.add(menu); } else { Menu parentMenu = map.get(menu.getParentId()); parentMenu.addChildMenu(menu); } } return treeMenu; } public List<Menu> getAllMenuEntities() { List<Menu> allMenus = new ArrayList<>(); Menu m1 = new Menu(); m1.setId("1"); Menu m2 = new Menu(); m2.setId("2"); Menu m3 = new Menu(); m3.setId("11"); m3.setParentId("1"); Menu m4 = new Menu(); m4.setId("12"); m4.setParentId("1"); Menu m5 = new Menu(); m5.setId("21"); m5.setParentId("2"); Menu m6 = new Menu(); m6.setId("111"); m6.setParentId("11"); allMenus.add(m1); allMenus.add(m2); allMenus.add(m3); allMenus.add(m4); allMenus.add(m5); allMenus.add(m6); return allMenus; } }
Menu实体类:
public class Menu { private String id; private String parentId; private List<Menu> childMenus=new ArrayList<>(); public String getId() { return id; } public void setId(String id) { this.id = id; } public String getParentId() { return parentId; } public void setParentId(String parentId) { this.parentId = parentId; } public List<Menu> getChildMenus() { return childMenus; } public void setChildMenus(List<Menu> childMenus) { this.childMenus = childMenus; } public void addChildMenu(Menu menu) { this.childMenus.add(menu); } @Override public String toString(){ return "menu{id:"+this.id+",parentId:"+this.parentId+",childMenus:"+childMenus+"}"; } }