三级分类查询

表结构

首先让我们看一下表
image
其中parent_cid用于存储父id 我们可以根据父id以树形的方式来展示数据

其次在让我们看一下表中数据
image
由此可知parent_cid0表示没有父id 也就是根节点

业务实现

category实体类中添加children属性 用于存储字节点 @TableField(exist = false) 用于表示此属性在数据库中不存在 mybatis plus 执行crud操作时忽略

    @TableField(exist = false)
    private List<PmsCategory> children;

首先将所所有的分类查询出来 之后根据java 8 steam流来进行流水线操作来生成我们想要的数据

List<PmsCategory> pmsCategories = categoryMapper.selectList(null);

首先根据之前表数据知道了parent_id为0表示为根节点 我们首先将根节点过滤出来

        List<PmsCategory> treeCategoryList = pmsCategories
                .stream()
                .filter((category -> category.getParentCid() == 0))
                .collect(Collectors.toList());

peek可以对流中没一个元素进行操作返回 我们可以使用peek来设置字节点 调用getChildren获取子节点

        List<PmsCategory> treeCategoryList = pmsCategories
                .stream()
                .filter((category -> category.getParentCid() == 0))
                .peek((category -> category.setChildren(getChildren(category, pmsCategories))))
                .collect(Collectors.toList());

        return treeCategoryList;

getChildren的实现是一个递归操作 因为遍历的子节点还可能有子节点 需要传入两个参数 参数一为根节点对象 参数二为所有节点的list 从list中查询节点
根据若root个节点 等于 要遍历的parentId就表示他们是父子关系 因为过滤后的节点还有可能有子节点调用peek进行递归调用 设置子节点

    private List<PmsCategory> getChildren(PmsCategory root, List<PmsCategory> allCategory) {
        List<PmsCategory> children = allCategory
                .stream()
                .filter((category -> Objects.equals(root.getCatId(), category.getParentCid())))
                .peek((category -> {
                    category.setChildren(this.getChildren(category, allCategory));
                }))
                .collect(Collectors.toList());

        return children;
    }

调用sort进行排序
因为sort可能为0 设置若sort对象不存在 设置为0
整体代码实现
image

posted @   RainbowMagic  阅读(91)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
点击右上角即可分享
微信分享提示