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 流如何进行合并操作相关推荐

  1. java orm框架有哪些_Java Stream ORM现在带有JOIN

    java orm框架有哪些 Speedment是一个Java Stream ORM工具包和运行时,它使您可以将数据库表作为标准Java Streams查看. 由于不必混合使用Java和SQL,因此该应 ...

  2. JAVA两个表相关联_java实现两张表的关联查询(非数据库语言)

    已知我有两张表: 我现在查询时需要同时获取两张表对应的数据.比如我想要获取 stuid,honName,obreson三个对应字段.我在脑子里梳理了一下思路,以我目前的知识储备,只能在数据库写一下两个 ...

  3. java两种绑定方式_java两种单例模式用法分析

    本文实例讲述了java两种单例模式用法.分享给大家供大家参考,具体如下: 按照加载方式的不同,单例模式有两种实现: private:只能在同一个类中使用 static:该类是类方法,不能调用实例方法. ...

  4. java stream 打印_Java打印流学习

    打印流 打印流的主要功能是用于输出,在整个IO包打印流分为两种类型,打印流可以很方便的进行输出. 1.字节打印流:PrintStream(在字节输出时,可以增强输出功能) 2.字符打印流:PrintW ...

  5. java stream 理解_java Stream的理解

    流是 Java 中最重要的基本概念之一.文件读写.网络收发.进程通信,几乎所有需要输入输出的地方,都要用到流. 流是做什么用的呢?就是做输入输出用的.为什么输入输出要用"流"这种方 ...

  6. java stream过滤_Java Stream过滤器

    java stream过滤 Java Stream filter can be very helpful when you want to do some processing only on som ...

  7. java 两个list排序_java实现两个不同list对象合并后并排序

    工作上遇到一个要求两个不同list对象合并后并排序 1.问题描述 从数据库中查询两张表的当天数据,并对这两张表的数据,进行合并,然后根据时间排序. 2.思路 从数据库中查询到的数据放到各自list中, ...

  8. java 两个集合比较_java 两个List集合各种情况对比处理

    Lambda作为函数式编程中的基础部分,在其他编程语言(例如:Scala)中早就广为使用,但在JAVA领域中发展较慢,直到java8,才开始支持Lambda. 抛开数学定义不看,直接来认识Lambda ...

  9. java文件分割合并_java实现文件分割与合并 类示例源码

    [实例简介] [实例截图] [核心代码] package cn.part.com; import java.io.BufferedInputStream; import java.io.Buffere ...

最新文章

  1. LTE上行加扰的目的是什么?
  2. RHEL6的系统开机的过程
  3. jdk环境变量配置_jmeter及jdk的环境变量配置
  4. java web Jersey_使用CXF和Jersey框架来进行Java的WebService编程
  5. 这4种分析方法,大牛产品经理都在用
  6. 雷军穿上印度传统服装:网友以为《西游记》拍新版了 这画面感受下
  7. Python教程和PyMySQL数据库导航
  8. 报错:fatal: Cannot get https://gerrit.googlesource.com/git-repo/clone.bundle解决
  9. 《图像分析基础》的专有名词解析
  10. 关于海康相机ip地址无法更改问题
  11. 计算机版本过低怎么办,浏览器版本过低嗡嗡叫怎么办_电脑显示浏览器版本过低嗡嗡叫如何处理-win7之家...
  12. 微信支付 发起商家转账API 2022年v3 transfer batches
  13. mysql navicat视图_Navicat 教程:MySQL 视图
  14. 岁月温柔-4 最美人间四月天
  15. shell base64 会自动换行问题
  16. 图片不变形,按照等比例缩小或扩大显示
  17. jmeter压力测试并发
  18. 电脑更改桌面图标与图标文字的大小
  19. python自动打卡
  20. 在MathType编辑乘号的方法介绍

热门文章

  1. 第一天2017/03/28
  2. 【数学和算法】协方差矩阵、方差
  3. 学习笔记——Java
  4. C语言编译全过程剖析
  5. 普林斯顿微积分读本:第 25 章 如何求解估算问题
  6. 深度学习(二十一)基于FCN的图像语义分割-CVPR 2015-未完待续
  7. 为什么算法渐进复杂度中对数的底数总为2
  8. (EM算法)The EM Algorithm
  9. 你真的理解JS的继承了吗?
  10. ProxySQL 监控和统计