Here we will see how to Merge Streams in Java 8.

How to Merge Streams:

Concatenating of streams in java 8 is achieved by using stream concat() method. Stream API has given us a static way Stream.concat() for merging streams.

Syntax:

Syntax
static <T> Stream<T> concat(Stream<? extends T> a, Stream<? extends T> b)

concat() method creates a lazily concatenated stream which contains all elements of the first stream followed by the second stream.

How to Merge Streams Example:

Here is a simple example of merging two different streams.

MergeTwoStreams.java
import java.util.stream.Stream;

class MergeTwoStreams {
    public static void main(String[] args) {
        Stream<String> stream1 = Stream.of("1", "2", "3");
        Stream<String> stream2 = Stream.of("A", "B", "C");
        Stream<String> stream1_stream2 = Stream.concat(stream1, stream2);
        System.out.println(stream1_stream2.collect(Collectors.toList()));
    }
}

Output:

Terminal
[1, 2, 3, A, B, C]

How to Merge Multiple Streams:

On the above example, we have seen merging the two streams, and we can also merge 2 or more different streams using Stream.concat() method.

MergingMultipleStreams.java
import java.util.stream.Stream;

public class MergingMultipleStreams {
    public static void main(String[] args) {

        Stream<Integer> stream1 = Stream.of(1,2,3);
        Stream<Integer> stream2 = Stream.of(4,5,6);
        Stream<Integer> stream3 = Stream.of(7,8,9);
        Stream<Integer> stream1_stream2_stream3 = Stream.concat(Stream.concat(stream1, stream2),stream3);
        System.out.println(stream1_stream2_stream3.collect(Collectors.toList()));

    }
}

Output:

Terminal
[1, 2, 3, 4, 5, 6, 7, 8, 9]

Merging Streams and Removing Duplicates:

It is a prevalent scenario to remove the duplicate elements from a stream. Stream.distinct() method is used to remove duplicates or get the distinct elements from a stream.

StreamDistinct.java
import java.util.stream.Collectors;
import java.util.stream.Stream;

public class StreamDistinct {
    public static void main(String[] args) {

        Stream<Integer> stream1 = Stream.of(1,2,3);
        Stream<Integer> stream2 = Stream.of(4,2,1);
        Stream<Integer> stream3 = Stream.of(3,5,6);
        Stream<Integer> stream1_stream2_stream3 = Stream.concat(Stream.concat(stream1, stream2),stream3);
        System.out.println(stream1_stream2_stream3.distinct().collect(Collectors.toList()));

    }
}

Output:

Terminal
[1, 2, 3, 4, 5, 6]

Done!

Happy Learning 🙂