网站首页 > 精选文章 / 正文
本篇文章主要介绍几种合并stream的方法,主要有原生JDK的方法和使用第三方库StreamEx和Jooλ的方法。
原生JDK
原生的JDK 8提供的Stream里的一些静态方法,非常有用,让我们来了解一下吧。
concat()合并两个Stream
Stream<Integer> stream1 = Stream.of(1, 2, 3); Stream<Integer> stream2 = Stream.of(4, 5); Stream<Integer> result = Stream.concat(stream1, stream2); assertEquals( asList(1, 2, 3, 4, 5), result.collect(Collectors.toList()) );
这是最简单的合并两个流的方式。
用Stream.of()合并多个流
之前的concat()方法并不支持合并多个stream,这时需要用到of(),可以实现多个stream的合并。
stream1 = Stream.of(1, 2, 3); stream2 = Stream.of(4, 5); Stream<Integer> stream3 = Stream.of(6, 7, 8); result = Stream.of(stream1, stream2, stream3) .flatMap(i -> i); assertEquals( asList(1, 2, 3, 4, 5, 6, 7, 8), result.collect(Collectors.toList()));
使用StreamEx
StreamEx是开源的Java库,扩展了Java 8 Streams的更多可能性。
Maven引入:
<dependency> <groupId>one.util</groupId> <artifactId>streamex</artifactId> <version>0.7.0</version> </dependency>
使用append()合并
stream1 = Stream.of(1, 2, 3); stream2 = Stream.of(4, 5); stream3 = Stream.of(6, 7, 8); result = StreamEx.of(stream1) .append(stream2) .append(stream3); assertEquals( asList(1, 2, 3, 4, 5, 6, 7, 8), result.collect(Collectors.toList()));
这样我们就可以动态不断合并流。
使用prepend()合并
Stream<String> streamA = Stream.of("["); Stream<String> streamB = Stream.of("google", "apple"); Stream<String> streamC = Stream.of("]"); Stream<String> resultStream = StreamEx.of(streamB) .prepend(streamA) .append(streamC); assertEquals( asList("[", "google", "apple", "]"), resultStream.collect(Collectors.toList()));
使用prepend()能明显地知道前后顺序。
使用Jooλ
Mavan引入:
<dependency> <groupId>org.jooq</groupId> <artifactId>jool-java-8</artifactId> <version>0.9.13</version> </dependency>
Jooλ和StreamEx很类似,也有对应的append()和prepend()方法。
stream1 = Stream.of(1, 2, 3); stream2 = Stream.of(4, 5); result = Seq.ofType(stream1, Integer.class) .append(stream2); assertEquals( asList(1, 2, 3, 4, 5), result.collect(Collectors.toList())); /*--------------*/ streamA = Stream.of("["); streamB = Stream.of("google", "apple"); streamC = Stream.of("]"); resultStream = Seq.ofType(streamB, String.class) .prepend(streamA) .append(streamC); assertEquals( asList("[", "google", "apple", "]"), resultStream.collect(Collectors.toList()));
总结
如果用得不多,JDK足以应付;如果经常使用,场景也比较多,用StreamEx和Jooλ能提高可读性。
Tags:java8 flatmap
- 上一篇:使用Java 8函数式编程生成字母序列
- 下一篇:一次搞懂 Promise 异步处理
猜你喜欢
- 2025-01-09 精通Spring Boot 3 : 9. Spring Boot 安全 (3)
- 2025-01-09 精通Spring Boot 3 : 7. Spring Boot 响应式 (1)
- 2025-01-09 别挠了,都快秃了,双因素认证我直接告诉你算了
- 2025-01-09 java8-Optional类使用介绍
- 2025-01-09 Java 中的 Optional
- 2025-01-09 知识总结-Java开发指Optional详解
- 2025-01-09 精通Spring Boot 3 : 7. Spring Boot 响应式 (2)
- 2025-01-09 读图数据库实战笔记08遍历与子图
- 2025-01-09 Java8中的Stream API详细分析
- 2025-01-09 学习Java 8 Stream Api (2) - Stream的中间操作