【Java必修课】Java 8之例说Stream的合并

本篇文章主要介绍几种合并stream的方法,主要有原生JDK的方法和使用第三方库StreamEx和Jooλ的方法。

原生JDK

原生的JDK 8提供的Stream里的一些静态方法,非常有用,让我们来了解一下吧。

concat()合并两个Stream

Stream stream1 = Stream.of(1, 2, 3);
Stream stream2 = Stream.of(4, 5);
Stream 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 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引入:


    one.util
    streamex
    0.7.0

使用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 streamA = Stream.of("[");
Stream streamB = Stream.of("google", "apple");
Stream streamC = Stream.of("]");
Stream resultStream = StreamEx.of(streamB)
        .prepend(streamA)
        .append(streamC);
assertEquals(
        asList("[", "google", "apple", "]"),
        resultStream.collect(Collectors.toList()));

使用prepend()能明显地知道前后顺序。

 

使用Jooλ

Mavan引入:


    org.jooq
    jool-java-8
    0.9.13

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λ能提高可读性。

 

 

 

----------the end----------

觉得不错就扫码关注公众号呗,更多精彩还在后面哦~

【Java必修课】Java 8之例说Stream的合并_第1张图片

学好技术,过好生活。

你可能感兴趣的:(【Java必修课】Java 8之例说Stream的合并)