Stream Api是JDK8提供的新特性,可以更为方便地对集合进行操作,比如我今天遇到的一个场景:
将本地的一个视频文件分成多块上传到Minio服务器,现在上传功能已经完成,需要调用minioClient对已经上传的文件重新合并成一个新的视频文件。
代码如下:
如图sources需要我们自己去构建,打开源码发现需要List sources 集合,这玩意儿就是保存分块文件的一个集合,需要我们自己去构建
一般的构建方法就是如下代码:往ArrayList中填ComposeSource类包装的分块文件
ArrayList<ComposeSource> sources = new ArrayList<>();
for (int i = 0; i < 7; i++) {
//指定分块文件的信息
ComposeSource testbucket =
ComposeSource.builder()
.bucket("testbucket")
.object("chunk/" + i)
.build();
sources.add(testbucket);
}
用Stream去写这个代码则会简介很多:
一句代码解决问题
1.Stream.iterate(0, i -> ++i):创建一个无限序列,从 0 开始,每次迭代时通过 i -> ++i 函数(一个 lambda 表达式)增加当前值。这里 i -> ++i 表示使用当前值 i,然后对其进行递增操作。
2.limit(7):使用 limit 方法来截取流的前 7 个元素,因为 iterate 创建的是无限序列,所以需要限制结果的数量。
3.map(i ->:使用 map 方法来转换流中的每个元素。这里的转换是创建一个新的 ComposeSource 对象。
4.collect(Collectors.toList()):使用 collect 方法和 Collectors.toList() 收集器来将流中的元素收集到一个列表中。
List<ComposeSource> sources = Stream.iterate(0, i -> ++i)
.limit(7).map(i ->
ComposeSource.builder()
.bucket("testbucket")//桶
.object("chunk/" + i)//存的地址、文件名
.build()).collect(Collectors.toList());