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

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

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

比如有三个Collection c1, c2, c3.


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

private static Stream concat1(List> collections) {

Stream result = Stream.empty();

for (Collection strings : collections) {

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

}

return   result;

}


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

private static Stream concat2(List> collections) {

return  collections.stream()

           .flatMap(Collection::stream);

}


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

方法三:

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

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

           .flatMap(Function.identity());

}

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

你可能感兴趣的:(java8中如何将多个集合的数据拼接成一个统一的流)