@Controller
@RequestMapping("/test")
public class TestTree{
public static Comparator<Menu> order() {
Comparator<Menu> comparator = new Comparator<Menu>() {
@Override
public int compare(Menu o1, Menu o2) {
if (o1.getOrder() != o2.getOrder()) {
return o1.getOrder() - o2.getOrder();
}
return 0;
}
};
return comparator;
}
@PostMapping("/findTree")
@ResponseBody
public static Map<String, Object> findTree() {
Menu menu = new Menu();
menu.setId("000");
menu.setIcon("icon");
menu.setName("一级菜单");
menu.setOrder(1);
menu.setParentId("0");
menu.setUrl("url");
Menu menu1 = new Menu();
menu1.setId("000001");
menu1.setIcon("icon");
menu1.setName("二级菜单");
menu1.setOrder(2);
menu1.setParentId("000");
menu1.setUrl("url");
Menu menu2 = new Menu();
menu2.setId("000002");
menu2.setIcon("icon");
menu2.setName("二级菜单2");
menu2.setOrder(3);
menu2.setParentId("000");
menu2.setUrl("url2");
Menu menu4 = new Menu();
menu4.setId("000001002");
menu4.setIcon("icon");
menu4.setName("三级菜单2");
menu4.setOrder(3);
menu4.setParentId("000001");
menu4.setUrl("url2");
Menu menu3 = new Menu();
menu3.setId("000001001");
menu3.setIcon("icon");
menu3.setName("三级菜单2");
menu3.setOrder(3);
menu3.setParentId("000001");
menu3.setUrl("url2");
List<Menu> allMenu = new ArrayList<Menu>();
allMenu.add(menu);
allMenu.add(menu1);
allMenu.add(menu2);
allMenu.add(menu3);
allMenu.add(menu4);
Map<String, Object> data = new HashMap<String, Object>();
try {
List<Menu> rootMenu = new ArrayList<Menu>();
for (Menu nav : allMenu) {
if (nav.getParentId().equals("0")&&nav.getParentId()!=null) {
rootMenu.add(nav);
}
}
Collections.sort(rootMenu, order());
for (Menu nav : rootMenu) {
List<Menu> childList = getChild(nav.getId(), allMenu);
nav.setChildren(childList);
}
data.put("list", rootMenu);
return data;
} catch (Exception e) {
return data;
}
}
public static List<Menu> getChild(String id, List<Menu> allMenu) {
List<Menu> childList = new ArrayList<Menu>();
for (Menu nav : allMenu) {
if (nav.getParentId().equals(id)) {
childList.add(nav);
}
}
for (Menu nav : childList) {
nav.setChildren(getChild(nav.getId(), allMenu));
}
Collections.sort(childList, order());
if (childList.size() == 0) {
return new ArrayList<Menu>();
}
return childList;
}
}
class Menu {
private String id;
private String name;
private String parentId;
private String url;
private String icon;
private int order;
private List<Menu> children;