使用Stream.concat()可合并两个流,多流可用flatMap或将流收集为列表后合并,Guava的Streams.concat()也支持多流合并,需根据场景选择合适方法。

在Java中,可以通过多种方式将多个Stream合并成一个集合。最常见的方式是使用Stream.concat()方法,或者通过收集到集合后再合并。下面介绍几种实用且清晰的方法。
Stream.concat() 是专门用于合并两个Stream的静态方法。它返回一个新的流,包含第一个流的所有元素,后接第二个流的所有元素。
注意:该方法只能合并两个流,若要合并多个,需要链式调用。示例:
Stream<String> stream1 = Stream.of("a", "b");
Stream<String> stream2 = Stream.of("c", "d");
Stream<String> stream3 = Stream.of("e", "f");
List<String> result = Stream.concat(stream1, Stream.concat(stream2, stream3))
                            .collect(Collectors.toList());
这里通过嵌套调用 Stream.concat() 实现了三个流的合并。
立即学习“Java免费学习笔记(深入)”;
当有多个流(如存放在集合中)时,可以将它们放入一个Stream中,然后使用 flatMap 展开为单个流。
这种方式更灵活,适用于任意数量的流。
示例:
Stream<String> stream1 = Stream.of("a", "b");
Stream<String> stream2 = Stream.of("c", "d");
Stream<String> stream3 = Stream.of("e", "f");
List<String> result = Stream.of(stream1, stream2, stream3)
                            .flatMap(s -> s)
                            .collect(Collectors.toList());
Stream.of() 创建了一个包含多个子流的流,flatMap将每个子流“压平”成元素,最终合并为一个整体流。
如果流已经处理过或不方便继续传递,也可以先分别收集为列表,再合并列表。
示例:
List<String> list1 = Stream.of("a", "b").collect(Collectors.toList());
List<String> list2 = Stream.of("c", "d").collect(Collectors.toList());
List<String> list3 = Stream.of("e", "f").collect(Collectors.toList());
List<String> result = new ArrayList<>();
result.addAll(list1);
result.addAll(list2);
result.addAll(list3);
这种方法直观易懂,但会创建中间集合,适合数据量不大的场景。
如果你项目中引入了Guava,可以使用 Streams.concat() 方法,支持可变参数,语法更简洁。
示例:
List<String> result = Streams.concat(stream1, stream2, stream3)
                            .collect(Collectors.toList());
Guava的Streams工具类对标准Stream进行了增强,使用前需添加依赖。
基本上就这些常用方式。根据实际场景选择:少量流用concat,多个流推荐flatMap,注重可读性也可先转列表再合并。注意流只能消费一次,避免重复使用已关闭的流。
以上就是在Java中如何合并多个Stream流形成一个集合的详细内容,更多请关注php中文网其它相关文章!
 
                        
                        每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
 
                Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号