streamset 数据合并_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 获取更多资讯

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java StreamJava 8中引入的新特性,它提供了一种简洁、高效的处理集合(List、Set、Map等)和数组的方式。它可以让我们在不改变原有数据结构的基础上,以一种函数式编程的方式操作数据,使代码更加简洁易懂。 下面是Java Stream的一些常用方法及其使用方式: 1. filter:过滤 filter方法可以过滤掉不符合条件的元素,只留下符合条件的元素。 例如: ```java List<Integer> nums = Arrays.asList(1, 2, 3, 4, 5); List<Integer> evenNums = nums.stream().filter(n -> n % 2 == 0).collect(Collectors.toList()); ``` 这段代码将nums集合中的偶数过滤出来,得到一个新的集合evenNums。 2. map:映射 map方法可以将集合中的每个元素映射成另一个元素。 例如: ```java List<String> words = Arrays.asList("hello", "world"); List<Integer> wordLengths = words.stream().map(String::length).collect(Collectors.toList()); ``` 这段代码将words集合中的每个元素(字符串)的长度映射成一个新的集合wordLengths。 3. flatMap:扁平化 flatMap方法可以将多个集合合并一个集合。 例如: ```java List<List<Integer>> numsList = Arrays.asList(Arrays.asList(1, 2), Arrays.asList(3, 4), Arrays.asList(5, 6)); List<Integer> nums = numsList.stream().flatMap(Collection::stream).collect(Collectors.toList()); ``` 这段代码将numsList中的所有元素合并一个新的集合nums。 4. forEach:遍历 forEach方法可以遍历集合中的每个元素。 例如: ```java List<Integer> nums = Arrays.asList(1, 2, 3, 4, 5); nums.stream().forEach(System.out::println); ``` 这段代码将nums集合中的每个元素打印出来。 5. reduce:归约 reduce方法可以将集合中的多个元素归约成一个元素。 例如: ```java List<Integer> nums = Arrays.asList(1, 2, 3, 4, 5); int sum = nums.stream().reduce(0, Integer::sum); ``` 这段代码将nums集合中的所有元素相加得到一个sum值。 以上是Java Stream的一些常用方法及其使用方式,希望对你有所帮助。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值