java8中如何将多个集合的数据拼接成一个统一的流

java8中stream的提供了一个拼接流的方法Stream.concat,可以将两个stream拼接成一个stream, 保持了两个stream中的元素顺序。

那么如果我们需要对多个集合中的元素拼接成一个stream来统一处理,可以怎么做呢?

比如有三个Collection<String> c1, c2, c3.


方法一,使用Stream.concat方法来拼接,可以使用一个for循环来处理。

private static Stream<String> concat1(List<Collection<String>> collections) {

Stream result = Stream.empty();

for (Collection<String> strings : collections) {

              result = Stream.concat(result,  strings.stream());

}

return   result;

}


方法二,使用flatMap方法,将集合变成stream, 再压平

private static Stream<String> concat2(List<Collection<String>> collections) {

return  collections.stream()

           .flatMap(Collection::stream);

}


对于不同集合类型的数据,如何做成一个统一的流?还是可以使用flatMap方法来做

方法三:

private static Stream<String> concat3(List<String> s1,String[] s2, Set<String> s3) {

return  Stream.of(s1.stream(), Arrays.stream(s2), s3.stream())

           .flatMap(Function.identity());

}

方法三和方法二相比,可以使用不同类型的集合类型来拼接流,方法二在拥有共同基类的情况下使用会显得简洁很多。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,131评论 19 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,805评论 18 399
  • 对象的创建与销毁 Item 1: 使用static工厂方法,而不是构造函数创建对象:仅仅是创建对象的方法,并非Fa...
    孙小磊阅读 2,045评论 0 3
  • Java 语言支持的类型分为两类:基本类型和引用类型。整型(byte 1, short 2, int 4, lon...
    xiaogmail阅读 1,385评论 0 10
  • 下雨的日子,真是让人头疼。 似乎,在下雨的日子,总是感慨“下了这么久,什么时候晴啊?”其实真的算一算,一年中下雨的...
    44阅读 276评论 0 1