前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >使用1.8新特性stream+lambda实现递归无限极循环

使用1.8新特性stream+lambda实现递归无限极循环

原创
作者头像
Java king
发布2023-02-21 18:09:27
9070
发布2023-02-21 18:09:27
举报
文章被收录于专栏:后端Java后端Java

1:首先编写需要实体类

具备参数:

主键ID

父类ID:这里我使用PID

本类集合

其余参数根据需求指定

2:思路整理

首先根据需求查询数据库中对应的数据子类父级ID对应父类ID全部查出来。

代码语言:java
复制
frontAuthorityMapper.selectList(new QueryWrapper<>()).stream().parallel().map(frontAuthority ->
  FrontAuthorityVo.builder().frontName(frontAuthority.getFrontName()).pid(frontAuthority.getPid()).id(frontAuthority.getId()).frontPath(frontAuthority.getFrontPath()).build()).collect(Collectors.toList())

我这里使用了MP无条件查出来数据库中所有数据

然后用Vo序列化数据

stream() :Java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据。

Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种对 Java 集合运算和表达的高阶抽象。

Stream API可以极大提高Java程序员的生产力,让程序员写出高效率、干净、简洁的代码。

这种风格将要处理的元素集合看作一种流, 流在管道中传输, 并且可以在管道的节点上进行处理, 比如筛选, 排序,聚合等。

元素流在管道中经过中间操作(intermediate operation)的处理,最后由最终操作(terminal operation)得到前面处理的结果。

parallel():并行流这里我的数据量不大,所以效果并不明显 如果数据量打的话 在保证线程安全的同时 使用并行流效果会快一倍。

当然也可以使用:parallerlStream() 当然新特性还有很多这里就不过多介绍了

Collectors.toList():Collectors 类实现了很多归约操作,例如将流转换成集合和聚合元素Collectors 可用于返回列表或字符串

如果想看实现流程可以去看下一stream的源码

代码语言:java
复制
mapInfo.stream().filter(daddyInfo -> (daddyInfo.getPid() == 0)).collect(Collectors.toList());
fatherInfo.forEach(info -> buildSubs(info, mapInfo.stream().filter(sonInfo -> (sonInfo.getPid() != 0)).collect(Collectors.toList())))

然后使用filter():过滤掉PID不等于0的 ==等于父类 过滤掉PID等于0的 ==等于子类

3:效果图

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档