java 8中构建无限的stream
2023-04-18 13:05:35 时间
java 8中构建无限的stream
简介
在java中,我们可以将特定的集合转换成为stream,那么在有些情况下,比如测试环境中,我们需要构造一定数量元素的stream,需要怎么处理呢?
这里我们可以构建一个无限的stream,然后调用limit方法来限定返回的数目。
基本使用
先看一个使用Stream.iterate来创建无限Stream的例子:
@Test
public void infiniteStream(){
Stream<Integer> infiniteStream = Stream.iterate(0, i -> i + 1);
List<Integer> collect = infiniteStream
.limit(10)
.collect(Collectors.toList());
log.info("{}",collect);
}
上面的例子中,我们通过调用Stream.iterate方法,创建了一个0,1,2,3,4....的无限stream。
然后调用limit(10)来获取其中的前10个。最后调用collect方法将其转换成为一个集合。
看下输出结果:
INFO com.flydean.InfiniteStreamUsage - [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
自定义类型
如果我们想输出自定义类型的集合,该怎么处理呢?
首先,我们定义一个自定义类型:
@Data
@AllArgsConstructor
public class IntegerWrapper {
private Integer integer;
}
然后利用Stream.generate的生成器来创建这个自定义类型:
public static IntegerWrapper generateCustType(){
return new IntegerWrapper(new Random().nextInt(100));
}
@Test
public void infiniteCustType(){
Supplier<IntegerWrapper> randomCustTypeSupplier = InfiniteStreamUsage::generateCustType;
Stream<IntegerWrapper> infiniteStreamOfCustType = Stream.generate(randomCustTypeSupplier);
List<IntegerWrapper> collect = infiniteStreamOfCustType
.skip(10)
.limit(10)
.collect(Collectors.toList());
log.info("{}",collect);
}
看下输出结果:
INFO com.flydean.InfiniteStreamUsage - [IntegerWrapper(integer=46), IntegerWrapper(integer=42), IntegerWrapper(integer=67), IntegerWrapper(integer=11), IntegerWrapper(integer=14), IntegerWrapper(integer=80), IntegerWrapper(integer=15), IntegerWrapper(integer=19), IntegerWrapper(integer=72), IntegerWrapper(integer=41)]
总结
本文介绍了两个生成无限stream的例子。本文的代码learn-java-streams
欢迎关注我的公众号:程序那些事,更多精彩等着您!
更多内容请访问 www.flydean.com
相关文章
- 智能照明引入商业建筑的三种方法
- 基于MATLAB的数字信号处理(5) FIR数字滤波器设计及软件实现
- 高阶自动驾驶系统设计开发到软件部署
- BAT 批处理命令 - 获取时间并进行自定义年月日、时分秒格式实例演示
- MobaXterm 设置在使用export DISPLAY=xx.xx.xx.xx:0.0后调用图形化界面不弹出提示方法
- Chrome 浏览器降级后浏览网站不保留用户数据问题原因及解决方法
- AI数据标注大量外包,南非、委内瑞拉等国民难逃数字剥削命运
- Linux系统查询指定路径下的进程,根据进程id号杀进程方法,进程卡死解决方法实例演示
- TS 4.5 最新发布!新的扩展名、新语法、新的工具类型
- 从监控到可观测性,设计思想、技术选型、职责分工都有哪些变化
- 程序员挑战龙拳 | 用代码实现刘畊宏龙拳
- 基于 Vue3 和 TS4 项目大量实践后的总结
- Linux 系统服务端oracle19c数据库全英文版安装教程
- 2022年高校毕业生破千万,AI岗月薪却有两万四?
- 马斯克最新访谈:关于自动驾驶、AI和特斯拉人形机器人
- GitHub封了41万俄罗斯开发者账户,开源真的无国界?
- 微服务与领域驱动设计,架构实践总结
- 亿级流量架构之服务降级思路与方法
- Meta元宇宙被质疑:年均烧百亿美元,小扎让员工「懵圈」
- 如何批量生成店内码