1、先把数据插入到数据库、pms_category文件
2、在Category控制层中查询、service层中写对应方法
/**
*查出所有分类以及子类,以树状结构组装起来
*/
@RequestMapping("/list/tree")
public R list(){
List<CategoryEntity> entities = categoryService.listWithTree();
return R.ok().put("data", entities);
}
3、在category的实体类中 加入子菜单属性
4、在Impl层中实现具体方法
@Override
public List<CategoryEntity> listWithTree() {
//1、获取所有list内容
List<CategoryEntity> entities = baseMapper.selectList(null);
//2、组装成树状结构
//2.1找到一级分类 使用stream().filter()过滤,过滤categoryEntity中ParentCid=0的,把它选出来并使用collect toList使用list集合收集
// List<CategoryEntity> level1Menus = entities.stream().filter((categoryEntity) -> {
// return categoryEntity.getParentCid() == 0;
// }).collect(Collectors.toList());
List<CategoryEntity> level1Menus = entities.stream().filter((categoryEntity) -> {
return categoryEntity.getParentCid() == 0;
}).map((menu)->{//每一个菜单
menu.setChildren(getChildrens(menu, entities));//将子类菜单赋给menu并返回过去——子菜单如何获得?通过递归获取子菜单
return menu;
}).sorted(Comparator.comparingInt(menu -> (menu.getSort() == null ? 0 : menu.getSort())))
.collect(Collectors.toList());
return level1Menus;
}
递归函数查询下一级的子菜单
//递归方法 返回子菜单 递归查找所有菜单的子菜单
private List getChildrens(CategoryEntity root, List all){//传入当前菜单CategoryEntity 以及 所有菜单List<CategoryEntity>,在all中找到root
List<CategoryEntity> children = all.stream().filter((categoryEntity) -> {
return categoryEntity.getParentCid() == root.getCatId(); //过滤:选取这个菜单的父节点等于root(当前菜单)的id并返回
}).map((categoryEntity)->{
//1、找到子菜单
categoryEntity.setChildren(getChildrens(categoryEntity, all));//还是需要找到子菜单,使用递归
return categoryEntity;
}).sorted(Comparator.comparingInt(menu -> (menu.getSort() == null ? 0 : menu.getSort())))
.collect(Collectors.toList());
return children;
}