一、API-三级分类-查询-递归树形结构数据获取 2020-06-19

1、先把数据插入到数据库、pms_category文件

2、在Category控制层中查询、service层中写对应方法

    /**

*查出所有分类以及子类,以树状结构组装起来

     */

    @RequestMapping("/list/tree")

    public R list(){

        List entities = categoryService.listWithTree();

        return R.ok().put("data", entities);

    }

3、在category的实体类中 加入子菜单属性

4、在Impl层中实现具体方法

 @Override

    public List listWithTree() {

//1、获取所有list内容

        List entities = baseMapper.selectList(null);


//2、组装成树状结构

//2.1找到一级分类  使用stream().filter()过滤,过滤categoryEntity中ParentCid=0的,把它选出来并使用collect toList使用list集合收集

//        List level1Menus = entities.stream().filter((categoryEntity) -> {

//            return categoryEntity.getParentCid() == 0;

//        }).collect(Collectors.toList());

        List 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,在all中找到root


        List 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;

    }

你可能感兴趣的:(一、API-三级分类-查询-递归树形结构数据获取 2020-06-19)