方法一:
@Override
public List<CategoryEntity> listWithTree() {
//1,查出所有分类
List<CategoryEntity> entities = baseMapper.selectList(null);
//2,组装成父子树形结构
//2.1 找到所有的一级分类
List<CategoryEntity> level1Menus = entities.stream().filter(categoryEntity ->
categoryEntity.getParentCid() == 0
).map((menu)->{
menu.setChildren(getChildrens(menu,entities));
return menu;
}).sorted((menu1,menu2)->{
return (menu1.getSort() == null?0:menu1.getSort()) - (menu2.getSort()==null?0:menu2.getSort());
}).collect(Collectors.toList());
return level1Menus;
}
//递归查找所有菜单的子菜单
private List<CategoryEntity> getChildrens(CategoryEntity root,List<CategoryEntity> all){
List<CategoryEntity> chirdren = all.stream().filter(categoryEntity -> {
return categoryEntity.getParentCid() == root.getCatId();
}).map(categoryEntity -> {
//找到子菜单
categoryEntity.setChildren(getChildrens(categoryEntity,all));
return categoryEntity;
}).sorted((menu1,menu2)->{
//菜单的排序
return (menu1.getSort() == null?0:menu1.getSort()) - (menu2.getSort()==null?0:menu2.getSort());
}).collect(Collectors.toList());
return chirdren;
}
递归方式二:
private List<Map<String, Object>> getMenu(List<MenuCopy1> menuCopy1s , Integer pid){
List<Map<String, Object>> mapList = new ArrayList<>();
for (int i = 0; i < menuCopy1s.size(); i++) {
Map<String,Object> map = null;
MenuCopy1 menuCopy1 = menuCopy1s.get(i);
if (pid == menuCopy1.getPid()){
map = new HashMap<>();
map.put("id",menuCopy1.getId());
map.put("text",menuCopy1.getText());
map.put("url",menuCopy1.getUrl());
map.put("nodes",getMenu(menuCopy1s,menuCopy1.getId()));
}
if (map!=null){
List<Map<String, Object>> nodes = (List<Map<String, Object>>) map.get("nodes");
if (nodes.size()<=0){
map.remove("nodes");
}
mapList.add(map);
}
}
return mapList;
}