本文实例讲述了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 流是经常遇到的操作。

希望本文所述对大家java程序设计有所帮助。

java 合并流_Java Stream 流实现合并操作示例相关推荐

  1. java 合并流_Java Stream 流如何进行合并操作

    1. 前言 Java Stream Api 提供了很多有用的 Api 让我们很方便将集合或者多个同类型的元素转换为流进行操作.今天我们来看看如何合并 Stream 流. 2. Stream 流的合并 ...

  2. Java合并流实现简单的文件合并示例

    合并流: SequenceInputStream:  表示其他输入流的逻辑串联.它从输入流的有序集合开始,并从第一个输入流开始读取,直到到达文件末尾,接着从第二个输入流读取,以此类推,知道到达包含的最 ...

  3. java合并流与文件的分割合并示例

    合并流: SequenceInputStream表示其他输入流的逻辑串联.它从输入流的有序集合开始,并从第一个输入流开始读取,直到到达文件末尾,接着从第二个输入流读取,依次类推,直到到达包含的最后一个 ...

  4. java 合并流_使用流执行聚合

    本系列的 第 1 部分 介绍了 Java SE 8 中添加的 java.util.stream 库.第二期文章将重点介绍 Streams 库的一个最重要的.灵活的方面 - 聚合和汇总数据的能力. &q ...

  5. java质因数算法_Java实现的质因数分解操作示例【基于递归算法】

    本文实例讲述了Java实现的质因数分解操作.分享给大家供大家参考,具体如下: 这里演示java通过递归实现质因数分解,代码如下: import java.util.Scanner; public cl ...

  6. java实现对大文件切割下载_Java实现大文件的切割与合并操作示例

    Java实现大文件的切割与合并操作示例 发布时间:2020-09-27 02:25:08 来源:脚本之家 阅读:99 作者:HiBoyljw 本文实例讲述了Java实现大文件的切割与合并操作.分享给大 ...

  7. java 两个stream合并_Java Stream 流如何进行合并操作

    1. 前言 Java Stream Api 提供了很多有用的 Api 让我们很方便将集合或者多个同类型的元素转换为流进行操作.今天我们来看看如何合并 Stream 流. 2. Stream 流的合并 ...

  8. java 新特性之 stream 流

    java 新特性之 stream 流 Java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据. 这种风格将要处理的元素集合看作一种流, 流在管道中传输, 并且可以在 ...

  9. Java中的Stream流以及收集操作

    一.Stream流的生成方式 1.Stream流的使用: <1>:生成流:通过数据源(集合.数组等)生成流 <2>:中间操作:一个流后面可以跟随零个或多个中间操作,其目的主要是 ...

最新文章

  1. PHP URL处理关键函数parse_url、parse_str与http_build_query
  2. 烂泥:学习Nagios(三): NRPE安装及配置
  3. 为什么接口中要允许添加默认方法?
  4. 安装phpredis扩展以及phpRedisAdmin工具
  5. php连接plc,PLC 几种常见的连接口和通讯协议
  6. mPaaS 月度小报 | 3月发生的大事件
  7. 开源免费的.NET图像即时处理的组件ImageProcessor
  8. 有问有答 | Storm技术内幕与实践精华问答
  9. Haproxy基于ACL做访问控制
  10. Python 中的黑暗角落(二):生成器协程的调度问题
  11. 滤波ad毛刺 c语言算法,Σ-Δ型ADC AD7124和AD717x的后置/增强型滤波器
  12. underscore.js 964 --- 1103行
  13. 已解决IndexError: list index out of range
  14. 云和恩墨数据库MogDB荣获2021年度IT168最佳创新产品奖
  15. 用汇编语言编程的计算机
  16. 今日金融词汇---BP
  17. 歌星大奖赛,评分系统
  18. freemarker/ftl模板/导出doc 单元格合并注意事项(一)
  19. 移动端测试-1-Android sdk的安装
  20. 机器视觉之图像预处理

热门文章

  1. matlab实现双边滤波_【他山之石】pytorch 实现双边滤波
  2. 没有bug队——加贝——Python 练习实例 9,10
  3. java7 nio2 新特性_JDK7新特性,你知道几个?
  4. 怎么从某个div跳转到另一个_另一个伊甸伊丝卡怎么样 伊丝卡使用攻略_
  5. ranger管mysql_添加Kafka的Ranger访问权限策略
  6. pads中如何设置等长_如何在SQL Server中设置扩展,监控系统性能
  7. docker 删除包含关键字的镜像_30分钟带你轻松掌握Docker原理
  8. 前端校验和后端校验区别
  9. 【Python】random模块生成多种类型随机数
  10. 【测试工具】在linux测试环境访问禅道数据库