@Override
public List<CategoryEntity> listWithTree() {
// 1、查出所有分类 设置为null查询全部
List<CategoryEntity> entities = baseMapper.selectList(null);
// 2、组装成父子的树形结构
List<CategoryEntity> levelList = entities.stream().filter(categoryEntity -> {
// parentCid ==0 为父目录默认0
return categoryEntity.getParentCid() == 0;
}).map(menu -> {
// 设置二三级分类 递归
menu.setChildren(getChildrens(menu,entities));
return menu;
}).sorted((menu1, menu2) -> {
// 排序 Sort字段排序
return (menu1.getSort() == null ? 0 : menu1.getSort()) - (menu2.getSort() == null ? 0 : menu2.getSort());
}).collect(Collectors.toList());
return levelList;
}
/**
* 递归查询子分类
* @param root 当前category对象
* @param all 全部分类数据
* @return
*/
private List<CategoryEntity> getChildrens(CategoryEntity root, List<CategoryEntity> all) {
List<CategoryEntity> collect = all.stream().filter(categoryEntity -> {
// 遍历所有的category对象的父类id = 等于root的分类id 说明是他的子类
return categoryEntity.getParentCid() == root.getCatId();
}).map(menu -> {
// 1、递归遍历菜单
menu.setChildren(getChildrens(menu, all));
return menu;
}).sorted((menu1, menu2) -> {
// 2、菜单排序
return (menu1.getSort() == null ? 0 : menu1.getSort()) - (menu2.getSort() == null ? 0 : menu2.getSort());
}).collect(Collectors.toList());
return collect;
}