首页 > 其他分享 >基于SpringBoot 应用Stream流+递归 实现多级分类

基于SpringBoot 应用Stream流+递归 实现多级分类

时间:2024-09-27 14:20:46浏览次数:10  
标签:Stream return SpringBoot 递归 List pid collect 地址 addr

SpringBoot -> Stream流实现

步骤:先查询所有级联的数据,然后通过Java8 Stream 流 来比较和判断,最终生成有顺序的级联数据

实体类:

@Data
public class Addr {
    /**
     * 主键id
     */
    private Long addrId;
    /**
     * 名称
     */
    private String addrName;
    /**
     * 子id
     */
    private Integer addrPid;
    
    
    private List<Addr> children;

}

对应的sql语句:

select addr_id,addr_name,addr_pid from addr

业务层:

使用递归的方法来进行多级查询

  public List<Addr> findAll() {
        //根据数据库查询所有地址的数据
        List<Addr> mapperAll = addrMapper.findAll();
        //使用Steam API过滤出一级地址(pid为0的地址) 并设置子地址
        List<Addr> collect = mapperAll.stream().filter(addr -> addr.getAddrPid() == 0)//过滤pid为0的一级地址
                .map(addr -> {
                    //为每个一级地址设置相应的子地址
                    addr.setChildren(getChildren(addr.getAddrId(), mapperAll));
                    return addr;
                }).collect(Collectors.toList());//收集处理后的地址列表
        return collect; //返回构建好的地址树
    }
    /**
     * 递归查询并返回给定父id下的所有的子地址
     * @param pid
     * @param addrs
     * @return
     */
    private List<Addr> getChildren(Long pid,List<Addr> addrs){
        //使用Stream API过滤出所有父id为pid的地址
        List<Addr> collect = addrs.stream()
                .filter(addr -> addr.getAddrPid().intValue()==pid.intValue()) // 注意这里使用了equals来比较Integer
                .map(addr -> {
                    //递归地为每个子地址设置相应的子地址
                    addr.setChildren(getChildren(addr.getAddrId(), addrs));
                    return addr;
                }).collect(Collectors.toList());//收集处理后的地址列表
        return collect.size() == 0 ? null: collect ; //返回构建好的地址树
    }

标签:Stream,return,SpringBoot,递归,List,pid,collect,地址,addr
From: https://blog.csdn.net/X_xxxx7/article/details/142569839

相关文章

  • springboot在线教学平台
     基于springboot+vue实现的在线教学平台 (源码+L文+ppt)4-069 4.1系统结构设计  这些功能可以充分满足在线教学平台的需求。此系统功能较为全面如下图系统功能结构如图4-1所示。        图4-1功能结构图         4.2系统功能模块设......
  • [微信小程序原创项目]基于Springboot+Vue+Uniapp的通用商城小程序、商城管理系统
    项目提供:完整源码+数据库sql文件+数据库表Excel文件关注我的B站:程序员阿水呀,带小白学习更多干货教程!1、项目功能描述本项目为双角色,用户和管理员,用户使用小程序前台,管理员使用web后台。1.1注册注册功能:填写用户名、密码进行注册。仅开放小程序端即用户端进行注册。......
  • springboot版本不同导致的报错
    Errorcreatingbeanwithname'sysOrganizeController'definedinURL[jar:file:/D:/ZBD/zxbczg-1.7.1/com/zhongbaodeng/rtms-se-admin-biz/1.3.4-SNAPSHOT/rtms-se-admin-biz-1.3.4-SNAPSHOT.jar!/com/sky/sparrow/admin/controller/SysOrganizeController.cl......
  • Springboot篮球竞赛预约平台kklwr--程序+源码+数据库+调试部署+开发环境
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、项目背景与意义随着体育运动的普及和全民健身意识的提升,篮球作为一项广受欢迎的运动项目,其竞赛活动日益增多。然而,传统的篮球竞赛组织方式存在......
  • Springboot垃圾分类公益回收管理系统666n5程序+源码+数据库+调试部署+开发环境
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表用户,垃圾分类,垃圾知识,垃圾搜索,回收者,垃圾回收,订单信息开题报告内容一、项目背景与意义随着城市化进程的加快,垃圾处理问题日益严峻,垃圾分类已成为社会共......
  • Springboot空地一体化智能交通平台测控中心软件系统p86jw(程序+源码+数据库+调试部署+
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表用户,智能车,车队信息,比赛信息,获奖情况,使用情况,无人机,无人机比赛,赛道编辑,用户报修,报修处理开题报告内容一、选题背景与意义随着城市化进程的加快和交......
  • Springboot老年人社区服务平台设计与实现x45mt程序+源码+数据库+调试部署+开发环境
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表志愿者,老人,需求分类,老人需求,需求领取,医疗服务,医疗预约,预约时间段,家政服务,家政预约,配送服务,配送预约开题报告内容一、项目背景与意义随着社会老龄化......
  • Springboot拉勾教育课程管理系统y862q--(程序+源码+数据库+调试部署+开发环境)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表用户,讲师,学院,课程分类,课程信息,课程购买,课程发送开题报告内容一、项目背景与意义随着在线教育市场的蓬勃发展,拉勾教育作为专注于IT职业教育的知名品牌,其......
  • Springboot科研项目申报网站设计6109r--程序+源码+数据库+调试部署+开发环境
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表用户,文件信息,成果类型,科技成果,友情链接开题报告内容一、研究背景与意义在科研领域,科研项目申报是科研活动的重要起点,其流程复杂且涉及众多环节。传统的纸......
  • Springboot课程在线测评系统lkn04程序+源码+数据库+调试部署+开发环境
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容随着在线教育的普及与发展,课程在线测评系统作为教学质量评估与学生学习效果检验的重要工具,其重要性日益凸显。本项目旨在设计并开发一套功能完善、......