通过Stream流对集合进行操作

Stream Api是JDK8提供的新特性,可以更为方便地对集合进行操作,比如我今天遇到的一个场景:

将本地的一个视频文件分成多块上传到Minio服务器,现在上传功能已经完成,需要调用minioClient对已经上传的文件重新合并成一个新的视频文件。

代码如下:

如图sources需要我们自己去构建,打开源码发现需要List sources 集合,这玩意儿就是保存分块文件的一个集合,需要我们自己去构建

一般的构建方法就是如下代码:往ArrayList中填ComposeSource类包装的分块文件

java 复制代码
        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() 收集器来将流中的元素收集到一个列表中。

java 复制代码
  List<ComposeSource> sources = Stream.iterate(0, i -> ++i)
                .limit(7).map(i ->
                        ComposeSource.builder()
                        .bucket("testbucket")//桶
                        .object("chunk/" + i)//存的地址、文件名
                     .build()).collect(Collectors.toList());
相关推荐
缘友一世27 分钟前
解决Spring Boot上传默认限制文件大小和完善超限异常(若依框架)
java·spring boot·后端
FixBug_Nick35 分钟前
Jenkins配置的JDK,Maven和Git
java·git·jdk·jenkins·maven
青春不流名1 小时前
flink iceberg写数据到hdfs,hive同步读取
java·大数据
lzjava20242 小时前
Redis数据结构之List
java·redis
爱的叹息2 小时前
Spring MVC 框架 的核心概念、组件关系及流程的详细说明,并附表格总结
java·spring·mvc
骑牛小道士3 小时前
java基础 迭代Iterable接口以及迭代器Iterator
java
代码吐槽菌4 小时前
基于微信小程序的智慧乡村旅游服务平台【附源码】
java·开发语言·数据库·后端·微信小程序·小程序·毕业设计
界面开发小八哥4 小时前
企业级Java开发工具MyEclipse v2025.1——支持AI编码辅助
java·ide·人工智能·myeclipse
可问 可问春风4 小时前
Java中的ArrayList方法
java
大苏打seven4 小时前
Java学习笔记(多线程):ReentrantLock 源码分析
java·笔记·学习