java 两个stream合并_Java Stream 流如何进行合并操作
1. 前言
Java Stream Api 提供了很多有用的 Api 让我们很方便将集合或者多个同类型的元素转换为流进行操作。今天我们来看看如何合并 Stream 流。
2. Stream 流的合并
Stream 流合并的前提是元素的类型能够一致。
2.1 concat
最简单合并流的方法是通过 Stream.concat() 静态方法:
Stream stream = Stream.of(1, 2, 3);
Stream another = Stream.of(4, 5, 6);
Stream concat = Stream.concat(stream, another);
List collect = concat.collect(Collectors.toList());
List expected = Lists.list(1, 2, 3, 4, 5, 6);
Assertions.assertIterableEquals(expected, collect);
这种合并是将两个流一前一后进行拼接:
2.2 多个流的合并
多个流的合并我们也可以使用上面的方式进行“套娃操作”:
Stream.concat(Stream.concat(stream, another), more);
你可以一层一层继续套下去,如果需要合并的流多了,看上去不是很清晰。
我之前介绍过一个Stream 的 flatmap 操作 ,它的大致流程可以参考里面的这一张图:
因此我们可以通过 flatmap 进行实现合并多个流:
Stream stream = Stream.of(1, 2, 3);
Stream another = Stream.of(4, 5, 6);
Stream third = Stream.of(7, 8, 9);
Stream more = Stream.of(0);
Stream concat = Stream.of(stream,another,third,more).
flatMap(integerStream -> integerStream);
List collect = concat.collect(Collectors.toList());
List expected = Lists.list(1, 2, 3, 4, 5, 6, 7, 8, 9, 0);
Assertions.assertIterableEquals(expected, collect);
这种方式是先将多个流作为元素生成一个类型为 Stream> 的流,然后进行 flatmap 平铺操作合并。
2.3 第三方库
有很多第三方的强化库 StreamEx 、Jooλ 都可以进行合并操作。另外反应式编程库 Reactor 3 也可以将 Stream 流合并为反应流,在某些场景下可能会有用。这里演示一下:
List block = Flux.fromStream(stream)
.mergeWith(Flux.fromStream(another))
.collectList()
.block();
3. 总结
如果你经常使用 Java Stream Api ,合并 Stream 流是经常遇到的操作。今天简单介绍了合并 Stream 流的方式,希望对你有用。我是 码农小胖哥 ,多多关注!更多干货奉上。
关注微信公众号:Felordcn 获取更多干货
java 两个stream合并_Java Stream 流如何进行合并操作相关推荐
- java orm框架有哪些_Java Stream ORM现在带有JOIN
java orm框架有哪些 Speedment是一个Java Stream ORM工具包和运行时,它使您可以将数据库表作为标准Java Streams查看. 由于不必混合使用Java和SQL,因此该应 ...
- JAVA两个表相关联_java实现两张表的关联查询(非数据库语言)
已知我有两张表: 我现在查询时需要同时获取两张表对应的数据.比如我想要获取 stuid,honName,obreson三个对应字段.我在脑子里梳理了一下思路,以我目前的知识储备,只能在数据库写一下两个 ...
- java两种绑定方式_java两种单例模式用法分析
本文实例讲述了java两种单例模式用法.分享给大家供大家参考,具体如下: 按照加载方式的不同,单例模式有两种实现: private:只能在同一个类中使用 static:该类是类方法,不能调用实例方法. ...
- java stream 打印_Java打印流学习
打印流 打印流的主要功能是用于输出,在整个IO包打印流分为两种类型,打印流可以很方便的进行输出. 1.字节打印流:PrintStream(在字节输出时,可以增强输出功能) 2.字符打印流:PrintW ...
- java stream 理解_java Stream的理解
流是 Java 中最重要的基本概念之一.文件读写.网络收发.进程通信,几乎所有需要输入输出的地方,都要用到流. 流是做什么用的呢?就是做输入输出用的.为什么输入输出要用"流"这种方 ...
- java stream过滤_Java Stream过滤器
java stream过滤 Java Stream filter can be very helpful when you want to do some processing only on som ...
- java 两个list排序_java实现两个不同list对象合并后并排序
工作上遇到一个要求两个不同list对象合并后并排序 1.问题描述 从数据库中查询两张表的当天数据,并对这两张表的数据,进行合并,然后根据时间排序. 2.思路 从数据库中查询到的数据放到各自list中, ...
- java 两个集合比较_java 两个List集合各种情况对比处理
Lambda作为函数式编程中的基础部分,在其他编程语言(例如:Scala)中早就广为使用,但在JAVA领域中发展较慢,直到java8,才开始支持Lambda. 抛开数学定义不看,直接来认识Lambda ...
- java文件分割合并_java实现文件分割与合并 类示例源码
[实例简介] [实例截图] [核心代码] package cn.part.com; import java.io.BufferedInputStream; import java.io.Buffere ...
最新文章
- LTE上行加扰的目的是什么?
- RHEL6的系统开机的过程
- jdk环境变量配置_jmeter及jdk的环境变量配置
- java web Jersey_使用CXF和Jersey框架来进行Java的WebService编程
- 这4种分析方法,大牛产品经理都在用
- 雷军穿上印度传统服装:网友以为《西游记》拍新版了 这画面感受下
- Python教程和PyMySQL数据库导航
- 报错:fatal: Cannot get https://gerrit.googlesource.com/git-repo/clone.bundle解决
- 《图像分析基础》的专有名词解析
- 关于海康相机ip地址无法更改问题
- 计算机版本过低怎么办,浏览器版本过低嗡嗡叫怎么办_电脑显示浏览器版本过低嗡嗡叫如何处理-win7之家...
- 微信支付 发起商家转账API 2022年v3 transfer batches
- mysql navicat视图_Navicat 教程:MySQL 视图
- 岁月温柔-4 最美人间四月天
- shell base64 会自动换行问题
- 图片不变形,按照等比例缩小或扩大显示
- jmeter压力测试并发
- 电脑更改桌面图标与图标文字的大小
- python自动打卡
- 在MathType编辑乘号的方法介绍