diff --git a/libraries/pom.xml b/libraries/pom.xml
index a4b554365d..ff1997e969 100644
--- a/libraries/pom.xml
+++ b/libraries/pom.xml
@@ -276,6 +276,16 @@
2.3.0
+
+ one.util
+ streamex
+ 0.6.5
+
+
+ org.jooq
+ jool
+ 0.9.12
+
0.7.0
diff --git a/libraries/src/test/java/com/baeldung/stream/JoolMergeStreamsTest.java b/libraries/src/test/java/com/baeldung/stream/JoolMergeStreamsTest.java
new file mode 100644
index 0000000000..e73861d8af
--- /dev/null
+++ b/libraries/src/test/java/com/baeldung/stream/JoolMergeStreamsTest.java
@@ -0,0 +1,35 @@
+package com.baeldung.stream;
+
+import org.jooq.lambda.Seq;
+import org.junit.Assert;
+import org.junit.Test;
+
+import java.util.Arrays;
+
+import static junit.framework.TestCase.assertEquals;
+
+public class JoolMergeStreamsTest {
+ @Test
+ public void givenTwoStreams_whenMergingStreams_thenResultingStreamContainsElementsFromBothStreams() {
+ Seq seq1 = Seq.of(1, 3, 5);
+ Seq seq2 = Seq.of(2, 4, 6);
+
+ Seq resultingSeq = seq1.append(seq2);
+
+ assertEquals(Arrays.asList(1, 3, 5, 2, 4, 6),
+ resultingSeq.toList());
+ }
+
+ @Test
+ public void givenThreeStreams_whenAppendingAndPrependingStreams_thenResultingStreamContainsElementsFromAllStreams() {
+ Seq seq = Seq.of("foo", "bar");
+ Seq openingBracketSeq = Seq.of("[");
+ Seq closingBracketSeq = Seq.of("]");
+
+ Seq resultingStream = seq.append(closingBracketSeq)
+ .prepend(openingBracketSeq);
+
+ Assert.assertEquals(Arrays.asList("[", "foo", "bar", "]"),
+ resultingStream.toList());
+ }
+}
\ No newline at end of file
diff --git a/libraries/src/test/java/com/baeldung/stream/MergeStreamsTest.java b/libraries/src/test/java/com/baeldung/stream/MergeStreamsTest.java
new file mode 100644
index 0000000000..217d2b5b64
--- /dev/null
+++ b/libraries/src/test/java/com/baeldung/stream/MergeStreamsTest.java
@@ -0,0 +1,53 @@
+package com.baeldung.stream;
+
+import org.junit.Test;
+
+import java.util.Arrays;
+import java.util.function.Function;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
+
+import static org.junit.Assert.assertEquals;
+
+public class MergeStreamsTest {
+
+ @Test
+ public void givenTwoStreams_whenMergingStreams_thenResultingStreamContainsElementsFromBothStreams() {
+ Stream stream1 = Stream.of(1, 3, 5);
+ Stream stream2 = Stream.of(2, 4, 6);
+
+ Stream resultingStream = Stream.concat(stream1,
+ stream2);
+
+ assertEquals(Arrays.asList(1, 3, 5, 2, 4, 6),
+ resultingStream.collect(Collectors.toList()));
+ }
+
+ @Test
+ public void givenThreeStreams_whenMergingStreams_thenResultingStreamContainsElementsFromAllStreams() {
+ Stream stream1 = Stream.of(1, 3, 5);
+ Stream stream2 = Stream.of(2, 4, 6);
+ Stream stream3 = Stream.of(18, 15, 36);
+
+ Stream resultingStream = Stream.concat(Stream.concat(stream1,
+ stream2),
+ stream3);
+
+ assertEquals(Arrays.asList(1, 3, 5, 2, 4, 6, 18, 15, 36),
+ resultingStream.collect(Collectors.toList()));
+ }
+
+ @Test
+ public void givenFourStreams_whenMergingStreams_thenResultingStreamContainsElementsFromAllStreams() {
+ Stream stream1 = Stream.of(1, 3, 5);
+ Stream stream2 = Stream.of(2, 4, 6);
+ Stream stream3 = Stream.of(18, 15, 36);
+ Stream stream4 = Stream.of(99);
+
+ Stream resultingStream = Stream.of(stream1, stream2, stream3, stream4).flatMap(Function.identity());
+
+ assertEquals(Arrays.asList(1, 3, 5, 2, 4, 6, 18, 15, 36, 99),
+ resultingStream.collect(Collectors.toList()));
+
+ }
+}
\ No newline at end of file
diff --git a/libraries/src/test/java/com/baeldung/stream/StreamExMergeStreamsTest.java b/libraries/src/test/java/com/baeldung/stream/StreamExMergeStreamsTest.java
new file mode 100644
index 0000000000..a964d76e8a
--- /dev/null
+++ b/libraries/src/test/java/com/baeldung/stream/StreamExMergeStreamsTest.java
@@ -0,0 +1,51 @@
+package com.baeldung.stream;
+
+import one.util.streamex.StreamEx;
+import org.junit.Test;
+
+import java.util.Arrays;
+
+import static org.junit.Assert.assertEquals;
+
+public class StreamExMergeStreamsTest {
+
+ @Test
+ public void givenTwoStreams_whenMergingStreams_thenResultingStreamContainsElementsFromBothStreams() {
+ StreamEx stream1 = StreamEx.of(1, 3, 5);
+ StreamEx stream2 = StreamEx.of(2, 4, 6);
+
+ StreamEx resultingStream = stream1.append(stream2);
+
+ assertEquals(Arrays.asList(1, 3, 5, 2, 4, 6),
+ resultingStream.toList());
+ }
+
+ @Test
+ public void givenFourStreams_whenMergingStreams_thenResultingStreamContainsElementsFromAllStreams() {
+ StreamEx stream1 = StreamEx.of(1, 3, 5);
+ StreamEx stream2 = StreamEx.of(2, 4, 6);
+ StreamEx stream3 = StreamEx.of(18, 15, 36);
+ StreamEx stream4 = StreamEx.of(99);
+
+ StreamEx resultingStream = stream1.append(stream2)
+ .append(stream3)
+ .append(stream4);
+
+ assertEquals(Arrays.asList(1, 3, 5, 2, 4, 6, 18, 15, 36, 99),
+ resultingStream.toList());
+
+ }
+
+ @Test
+ public void givenThreeStreams_whenAppendingAndPrependingStreams_thenResultingStreamContainsElementsFromAllStreams() {
+ StreamEx stream1 = StreamEx.of("foo", "bar");
+ StreamEx openingBracketStream = StreamEx.of("[");
+ StreamEx closingBracketStream = StreamEx.of("]");
+
+ StreamEx resultingStream = stream1.append(closingBracketStream)
+ .prepend(openingBracketStream);
+
+ assertEquals(Arrays.asList("[", "foo", "bar", "]"),
+ resultingStream.toList());
+ }
+}