使用Stream流来进行分类展示。

21 篇文章 0 订阅
订阅专栏
7 篇文章 0 订阅
订阅专栏
5 篇文章 0 订阅
订阅专栏

1:首先,先来看我的数据库。

 在我的数据库中可以看到,一级分类得parent_id是0,二级分类得parent_id就是他得父类得id

2:目标

我的目标呢,就是要通过流式编程要将一级分类和二级分类整合到一起,也就是要将二级分类放到一级分类中得children 属性中,然后返回给前端。

 3:解决办法

(1)第一种

     思路就是,单独创建两个类,一个一级分类,一个二级分类,,然后使用MP,分别获取到所有得一级分类和所有得二级分类,在这里,因为后台返回得是表中所有得字段,而不是我们所要得字段,所以需要单独去赋值。

//一级分类
@Data
@Accessors(chain = true)
public class OneSubject {
    private String id;
    private String title;

    //一个一级分类有多个二级分类
    private List<TwoSubject> children=new ArrayList<>();
}




//二级分类
@Data
@AllArgsConstructor
@NoArgsConstructor
public class TwoSubject {
    private String id;
    private String title;
}

Java代码实现

@Service
public class EduSubjectServiceImpl extends ServiceImpl<EduSubjectMapper, EduSubject> implements EduSubjectService {

    //将一级分类和二级分类放到一起
    @Override
    public List<OneSubject> getAllOneTwoSubject() {
        //查询所有一级分类 parentid=0
        QueryWrapper<EduSubject> wrapperOne = new QueryWrapper<>();
        wrapperOne.eq("parent_id","0");
        List<EduSubject> oneSubjectList = baseMapper.selectList(wrapperOne);
        //查询所有二级分类 parentid!=0

        QueryWrapper<EduSubject> wrapperTwo = new QueryWrapper<>();
        wrapperOne.ne("parent_id","0");
        List<EduSubject> twoSubjectList = baseMapper.selectList(wrapperTwo);
        //创建list集合,用于存放最终封装的数据
        List<OneSubject> finalSubjectList=new ArrayList<>();
        //封装一级分类
        //查询出来所有的一级分类list集合遍历,得到每一级分类对象,获得每个一级分类对象值
        //封装到要求的list集合里面
        for (int i = 0; i < oneSubjectList.size(); i++) {
            EduSubject eduSubject = oneSubjectList.get(i);
            OneSubject oneSubject = new OneSubject();
//            oneSubject.setId(eduSubject.getId());
//            oneSubject.setTitle(eduSubject.getTitle());
            //把eduSubject值复制到对应的oneSubject对象里面,两个对象里面的属性相同对应的的自动赋值
            BeanUtils.copyProperties(eduSubject,oneSubject);

            //在一级分类循环遍历查询所有的二级分类
            //创建list集合封装每个一级分类的二级分类
            List<TwoSubject> twoFinalSubjectList=new ArrayList<>();
            //遍历二级分类list集合
            for (int j = 0; j < twoSubjectList.size(); j++) {
                EduSubject tSubject = twoSubjectList.get(j);
                //如果二级分类的parentid和一级分类的id一样,就把它加入到一级分类
                if(tSubject.getParentId().equals(eduSubject.getId())){
                    TwoSubject twoSubject = new TwoSubject();
                    BeanUtils.copyProperties(tSubject,twoSubject);
                    twoFinalSubjectList.add(twoSubject);
                }
            }

            //把一级下面所有的二级分类放到一级分类里面
            oneSubject.setChildren(twoFinalSubjectList);
            finalSubjectList.add(oneSubject);

        }

        return finalSubjectList;
    }

}

(2)第二种

①:第二种方法使用流式编程,也就是我们今天得主题。

思路:这里不用创建类型,在数据库返回得接收字段中  新增一个  字段。创建一个Stream流,然后在map方法中设置他的二级分类,也就是children.  在这里定义一个方法,就是为了获取某一个一级分类下面得所有二级分类,然后返回所有二级分类,然后加到一级分类得children属性中。

 @TableField(exist = false)//该字段在数据库中并不存在
    private List<EduSubject> children;

Java代码实现

    //将一级分类和二级分类放到一起
    @Override
    public List<EduSubject> getAllOneTwoSubject() {

        //查询所有一级分类 parentid=0
        QueryWrapper<EduSubject> wrapperOne = new QueryWrapper<>();
        wrapperOne.eq("parent_id", "0");
        List<EduSubject> oneSubjectList = baseMapper.selectList(wrapperOne);

        //查询所有二级分类 parentid!=0
        QueryWrapper<EduSubject> wrapperTwo = new QueryWrapper<>();
        wrapperOne.ne("parent_id", "0");
        List<EduSubject> twoSubjectList = baseMapper.selectList(wrapperTwo);

        //此时已经拿到了一级分类(oneSubjectList)和二级分类(twoSubjectList),
        //1:采用流式编程将二级分类中得数据封装到一级分类中得children中

        oneSubjectList.stream()
                .map(sub ->{
                    return sub.setChildren(getChildren(sub.getId(),twoSubjectList));
                })
               .collect(Collectors.toList());
        return oneSubjectList;
    }

    // //判断一级父类中得二级分类
    @Override
    public List<EduSubject> getChildren(String oneSubject, List<EduSubject> eduSubject) {
     return  eduSubject.stream().filter(res -> {return res.getParentId().equals(oneSubject);}).collect(Collectors.toList());
    }

②:创建实体类,不在原来类中去改变。

  @Override
    public List<ChapterVo> getChapterVideoByCourseId(String courseId) {
        //根据课程id查询课程里面所有章节
        QueryWrapper<EduChapter> eduChapterQueryWrapper = new QueryWrapper<EduChapter>();
        eduChapterQueryWrapper.eq("course_id",courseId);
        List<EduChapter> eduChapterList = baseMapper.selectList(eduChapterQueryWrapper);

        //根据课程id查询课程里面所有的小节
        QueryWrapper<EduVideo> eduVideoQueryWrapper = new QueryWrapper<>();
        eduVideoQueryWrapper.eq("course_id",courseId);
        List<EduVideo> eduVideoList = videoService.list(eduVideoQueryWrapper);

        //创建一个最终得返回集合
        List<ChapterVo> finalList = new ArrayList<>();

        eduChapterList.stream()
                .map(res ->{
                    ChapterVo chapterVo = new ChapterVo();
                    //将res对象属性set给chapterVo
                    BeanUtils.copyProperties(res,chapterVo);
                    chapterVo.setChildren(
                            eduVideoList.stream()
                                    //根据id进行判断过滤
                                .filter(ress ->{return chapterVo.getId().equals(ress.getChapterId());})
                                .map(ressss ->{
                                    VideoVo videoVo = new VideoVo();
                                    BeanUtils.copyProperties(ressss,videoVo);
                                    return videoVo;
                                })
                                .collect(Collectors.toList())
                    );
                    finalList.add(chapterVo);
                    return chapterVo;
                })
                .collect(Collectors.toList());
        return finalList;
    }

Java stream 分类 排序】
weixin_43387346的博客
02-24 922
Java 集合分类并排序 今天工作中遇到了多参数多返回值的场景,而且还要求每个参数取对应列表中最新的那条数据,感觉很容易,但是代码执行起来费劲… 入参:channlNoList 出参:List,其中DTO中包括:通道号(channlNo),处理时间(handleTime),处理意见(handleOpinion) 要求:输入通道号,分别取出该List最新的一条处理意见 分析: channlNo<---->List (1对n关系) channlNoList<---->List
JAVA-Stream详解
最新发布
分享,学习,专注,努力,向上。
07-02 3422
Stream)是Java 8引入的新特性,它是一种处理集合数据的高级抽象概念。Stream提供了一种更为简洁、强大和易于使用的方式来操作数据集合,可以进行过滤、映射、排序、聚合等各种操作,同时还支持并行处理,提高了代码的可读性和性能。
Stream分类
雅文科技的博客
05-05 520
Java 中的Stream)是一组用于处理输入和输出的类和接口。可以用于读取和写入文件、网络连接、内存中的数据等。在 Java 中,可以分为字节和字符,字节用于处理二进制数据,字符用于处理文本数据。需要注意的是,在使用进行数据读写操作时,需要正确处理的打开、关闭、异常处理和缓冲等问题,以确保数据的完整性和正确性。等缓冲类,它们可以提高的读写效率。另外,还有一些高级类,例如。除了上述类之外,还有一些其他常用的类,例如。等对象类,它们可以用于读写对象数据。
Java Stream()的分类, 四大基本的介绍
nvd11的专栏
06-23 9569
上一篇文章已经介绍过什么是, 以及的基本概念 http://blog.csdn.net/nvd11/article/details/29917065 本文主要介绍java
Stream三级分类(超简单)
qq_34160849的博客
11-30 514
Stream三级分类
java中的stream分类与介绍
jsq916的博客
07-25 1247
java中常见的stream
java Stream 使用
04-15
举例来说,我们可以通过以下方式使用Stream: ```java List<Person> personList = ... // 员工列表 // 筛选出薪资大于8000的员工 List<Person> highPaidEmployees = personList.stream() .filter(p -> p.getSalary...
Stream
weixin_43575838的博客
07-29 215
主要内容 常用函数式接口 Stream 学习目标 能够使用Function<T, R>函数式接口 能够使用Predicate函数式接口 能够理解与集合相比的优点 能够理解的延迟执行特点 能够通过集合或数组获取 能够掌握常用的操作 能够使用进行并发操作 能够将中的内容收集(转换为)到集合中 能够将中的内容收集(转换为)到数组中 1、常用函数式接口 1.1 Predicate接口:测试参数真假,用来条件判断,还有与或非连接 有时候我们需要对某种类型的数据进行
Java 8 Stream 如何使用2-用收集数据
热门推荐
java大神起床啦
12-14 4万+
上一篇讲了可以用类似于数据库的操作帮助你处理集合。在本篇中,你会发现collect是一个归约操作,就像reduce一样可以接受各种做法作为参数,将中的元素累积成一个汇总结果。具体的做法是通过定义新的Collector接口来定义的,因此区分Collection、Collector和collect是很重要的。 本篇内容: 用Collectors类创建和使用收集器 将数据归约为一个值 汇总:归约的特殊情况 数据分组和分区 开发自己的自定义收集器 收集器简介 前一个例子清楚地展示了函数式编程相对于指.
举例讲解Java中的Stream概念
09-03
总的来说,Java中的Stream提供了一种新的处理数据的方式,通过组合一系列操作来高效处理数据,尤其在大数据和并发场景下表现优秀。它改变了传统Java中迭代集合的方式,使代码更加优雅和高效。
stream 归类条件数据
xiaojiakun的博客
08-16 351
Stream Java 8 新提供给开发者的一组操作集合的 API //处理前的数据 List<CountRespVO> orderList =[ {NameId:"ac",name:"明"}, {NameId:"bbb",name:"李"}, {NameId:"ac",name:"蛋"} ] //处理条件 NameId = ac List<CountRespVO> cell = orderList.stream() .filter(a -> Objects.eq
stream各种类区别
pengdean的专栏
03-28 4310
 StreamSystem.IO为我们提供了一个抽象类Stream,Stream类支持对字节的读写操作。在Stream类中包括了对异步操作的支持。既然Stream是抽象类,所有其它的类就都必须从Steam类中继承。Stream类及其子类共同构成了一个数据源和数据存储的视图,从而封装了操作系统和底层存储的各个细节,使程序员把注意力集中到程序的应用逻辑上来。包含以下基本操作:读
Stream
h294590501的专栏
05-14 693
Stream ​ 说到 Stream 便容易想到 I/O Stream,而实际上,谁规定“”就一定是“IO ”呢? ​ 在 Java 8 中,得益于Lambda 所带来的函数式编程, 引入了一个全新的 Stream 概念,用于解决已有集合类库既有的弊端。Stream 引入案例 案例需求:• 有如下集合List&lt;String&gt; list = new ArrayList&lt;&...
java stream对list归类,去重
yhyh1233的博客
02-21 1052
根据某一字段对list去重 ArrayList<Object> list= new ArrayList<>(); ArrayList<Object> collect = list.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(Object-> Object.getO..
Java - Stream详解
weixin_73869209的博客
06-05 1万+
StreamJava 8中的一个新特性,它提供了一种处理集合和数组的方式。Stream可以让我们以一种更加简洁、高效、可读性更强的方式来处理数据。Stream可以用于过滤、映射、排序、聚合等操作,它可以让我们避免使用循环和条件语句来处理数据,从而让代码更加简洁易懂。Stream的操作可以分为中间操作和终止操作两种类型,中间操作返回的是一个新的Stream,终止操作返回的是一个非Stream类型的结果。Stream的处理是惰性求值的,只有在执行终止操作时才会开始处理数据。
Stream常用方法总结
我的青春一去不复返
04-21 1479
Java8新特性,Stream常用方法总结。
java8中StreamAPI的分类方法,以及list分类合并方法
weixin_43744474的博客
04-21 1959
java8中StreamAPI的分类方法,以及list分类合并方法
JAVA二级分组3种方式,看了很多文章才发现这个非常灵活的用法:Collectors.groupingBy分2级,最后再把其中对象值取出来放Set中
qq_25029919的专栏
04-15 628
【代码】JAVA二级分组3种方式,看了很多文章才发现这个非常灵活的用法:Collectors.groupingBy分2级,最后再把其中对象值取出来放Set中。
Stream详解
wu_amber的博客
08-19 2172
什么是Stream Java8 中添加了一个新的接口类 Stream,相当于高级版的 Iterator,通过 Lambda 表达式对集合进行各种非常便利、高效的聚合操作(Aggregate Operation),或者大批量数据操作 (Bulk Data Operation)。Stream不仅可以通过串行的方式实现数据操作,还可以通过并行的方式处理大批量数据,提高数据的处理效率。 Stream操...
写文章

热门文章

  • Nacos与Eureka的区别 31717
  • Vue页面渲染之后进行刷新一次页面 6166
  • redis实现点赞功能。 6105
  • uniapp登录授权详细过程 5096
  • Vue中如何动态显示时间? 4124

分类专栏

  • uniapp 4篇
  • 设计模式 22篇
  • SpringBoot 21篇
  • Java小工具 5篇
  • redis 8篇
  • SpringCloud 16篇
  • java 7篇
  • Mybatis-plus 5篇
  • elasticsearch 11篇
  • vue 7篇
  • RabbitMQ 7篇
  • SSM 1篇
  • Mybatis 1篇

最新评论

  • redis实现点赞功能。

    绝命Coding: 欢迎大佬来交流,【大厂面试官问我:Redis处理点赞,如果瞬时涌入大量用户点赞(千万级),应当如何进行处理?【后端八股文一:Redis点赞八股文合集】 - CSDN App】http://t.csdnimg.cn/v7t8i

  • 解决chromedriver@2.27.2install: `node install.js` 的问题

    小泽不会Java: 不要客气,一起成长哦

  • 在nacos中实现自动热部署用@RefreshScope出现空指针异常。

    耗子喂汁: 对,很奇怪

  • 在nacos中实现自动热部署用@RefreshScope出现空指针异常。

    小泽不会Java: 你也报错了吗表情包

  • 在nacos中实现自动热部署用@RefreshScope出现空指针异常。

    耗子喂汁: 看案例应该是黑马教程,明明版本都一样,怎么老师就没报错呢....

最新文章

  • uniapp父子组件相互传值
  • uniapp登录授权详细过程
  • uniapp小demo
2022年92篇

目录

目录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小泽不会Java

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或 充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

玻璃钢生产厂家玻璃钢雕塑开模招聘玻璃钢雕塑需求玻璃钢雕塑厂家华宝原2022商场美陈宁德玻璃钢卡通座椅雕塑安康玻璃钢气球雕塑江苏常用商场美陈生产厂家河北中庭商场美陈哪里买玻璃钢仿真猴公园雕塑深圳人物玻璃钢雕塑定做厂家辽宁玻璃钢雕塑厂家贵州玻璃钢雕塑景观装饰清远玻璃钢人物雕塑参考价金昌彩色玻璃钢雕塑定制玻璃钢雕塑怎样报价巴西商场美陈好看的玻璃钢雕塑铸铜玻璃钢仿铜雕塑定制龙岩玻璃钢仿古铜雕塑广东玻璃钢雕塑摆件厂家直销义马商场美陈植物墙商场里商业美陈一般多少钱桐乡玻璃钢门头雕塑商场服装店铺秋季美陈广州小品系列玻璃钢雕塑价格江西创意玻璃钢雕塑销售厂家定西人物玻璃钢雕塑多少钱玻璃钢雕塑手绘画宝丰玻璃钢雕塑五家渠玻璃钢雕塑香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声单亲妈妈陷入热恋 14岁儿子报警汪小菲曝离婚始末遭遇山火的松茸之乡雅江山火三名扑火人员牺牲系谣言何赛飞追着代拍打萧美琴窜访捷克 外交部回应卫健委通报少年有偿捐血浆16次猝死手机成瘾是影响睡眠质量重要因素高校汽车撞人致3死16伤 司机系学生315晚会后胖东来又人满为患了小米汽车超级工厂正式揭幕中国拥有亿元资产的家庭达13.3万户周杰伦一审败诉网易男孩8年未见母亲被告知被遗忘许家印被限制高消费饲养员用铁锨驱打大熊猫被辞退男子被猫抓伤后确诊“猫抓病”特朗普无法缴纳4.54亿美元罚金倪萍分享减重40斤方法联合利华开始重组张家界的山上“长”满了韩国人?张立群任西安交通大学校长杨倩无缘巴黎奥运“重生之我在北大当嫡校长”黑马情侣提车了专访95后高颜值猪保姆考生莫言也上北大硕士复试名单了网友洛杉矶偶遇贾玲专家建议不必谈骨泥色变沉迷短剧的人就像掉进了杀猪盘奥巴马现身唐宁街 黑色着装引猜测七年后宇文玥被薅头发捞上岸事业单位女子向同事水杯投不明物质凯特王妃现身!外出购物视频曝光河南驻马店通报西平中学跳楼事件王树国卸任西安交大校长 师生送别恒大被罚41.75亿到底怎么缴男子被流浪猫绊倒 投喂者赔24万房客欠租失踪 房东直发愁西双版纳热带植物园回应蜉蝣大爆发钱人豪晒法院裁定实锤抄袭外国人感慨凌晨的中国很安全胖东来员工每周单休无小长假白宫:哈马斯三号人物被杀测试车高速逃费 小米:已补缴老人退休金被冒领16年 金额超20万

玻璃钢生产厂家 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化