前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >树形分类设计

树形分类设计

作者头像
CODER-V
发布2023-04-12 09:47:08
9540
发布2023-04-12 09:47:08
举报
文章被收录于专栏:藏经阁藏经阁

1. 概述

在开发中,我们经常会涉及类别相关的树形结构的开发,比如:

在这里插入图片描述
在这里插入图片描述

2. 数据库设计

对于上图这样的分类树形结构,我们来看一下下面的category表的设计。

  • cat_level:当前分类属于树形结构第几层。
  • show_status:是否在树形结构中显示当前层级。
  • parent_cid:当前分类的父分类。
  • sort:分类排序。
在这里插入图片描述
在这里插入图片描述

3. 后台生成树形结构

代码语言:javascript
复制
	/**
     * 封装树形结构
     * @return
     */
    @Override
    public List<CategoryEntity> listWithTree() {

        //1、查询出所有分类
        List<CategoryEntity> entities = super.baseMapper.selectList(null);

        //2、组装成父子的树形结构
        //2.1)、找到所有一级分类
        List<CategoryEntity> levelMenus = entities.stream()
                // 0 是一级分类
                .filter(e -> e.getParentCid() == 0)
                .map((menu) -> {
                    // 返回当前分类的子分类,二级分类
                    menu.setChildren(getChildrens(menu, entities));
                    return menu;
                })
                // 对子分类排序
                .sorted((menu, menu2) -> {
                    return (menu.getSort() == null ? 0 : menu.getSort()) - (menu2.getSort() == null ? 0 : menu2.getSort());
                })
                .collect(Collectors.toList());

        return levelMenus;
    }


	//递归查找所有菜单的子菜单
    private List<CategoryEntity> getChildrens(CategoryEntity root, List<CategoryEntity> all) {

        List<CategoryEntity> children = all.stream().filter(categoryEntity -> {
			// 若当前分类的父ID == 指定的分类ID,则当前分类是其子分类
			// return categoryEntity.getParentCid() == root.getCatId();
            return categoryEntity.getParentCid().equals(root.getCatId());
        }).map(categoryEntity -> {
            //1、找到子菜单(递归)
            categoryEntity.setChildren(getChildrens(categoryEntity, all));
            return categoryEntity;
        }).sorted((menu, menu2) -> {
            //2、菜单的排序
            return (menu.getSort() == null ? 0 : menu.getSort()) - (menu2.getSort() == null ? 0 : menu2.getSort());
        }).collect(Collectors.toList());

        return children;

    }
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-04-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 概述
  • 2. 数据库设计
  • 3. 后台生成树形结构
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档