通过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());
相关推荐
Zane19944 分钟前
HashSet、TreeSet、LinkedHashSet:底层都是"套壳"
java·后端
相顾若初见18 分钟前
RuoYi后端jar镜像制作
java·jar
MacroZheng25 分钟前
程序员看文档神器,装上它,看Spring官方文档就一目了然了!
java·人工智能·后端
深漂的华哥34 分钟前
Ruoyi-Vue-Plus(V5.6.2) 开发环境搭建
java·前端·spring boot·后端·spring·ruoyi
wanger6137 分钟前
AI应用开发知识点总结
java
Escalating_xu39 分钟前
【C++ vector 深度解析】从常用接口、扩容机制与迭代器失效到核心模拟实现
java·c++·面试
今天AI了吗39 分钟前
AI 数据安全治理框架:模型能力与数据权限的边界在哪里
java·linux·开发语言·人工智能·python·深度学习·机器学习
LCG元41 分钟前
【实战】树莓派物联网开发:DHT11温湿度采集与MQTT云上报全流程
java·jvm·物联网
斯内普吖42 分钟前
(开源)农产品电商系统实战指南 基于 Java + SpringBoot + Vue + MySQL
java·vue.js·spring boot·mysql·开源
SimonKing1 小时前
AI逆向实战:一个壁纸网站被我5分钟摸透了,你也能
java·后端·程序员