diff --git a/core-java-modules/core-java-9-streams/README.md b/core-java-modules/core-java-9-streams/README.md
new file mode 100644
index 0000000000..0ad8500689
--- /dev/null
+++ b/core-java-modules/core-java-9-streams/README.md
@@ -0,0 +1,6 @@
+## Core Java 9 streams
+
+This module contains articles about Java 9 streams
+
+### Relevant Articles:
+- [How to Break from Java Stream forEach](https://www.baeldung.com/java-break-stream-foreach)
diff --git a/core-java-modules/core-java-9-streams/pom.xml b/core-java-modules/core-java-9-streams/pom.xml
new file mode 100644
index 0000000000..6e167caf9c
--- /dev/null
+++ b/core-java-modules/core-java-9-streams/pom.xml
@@ -0,0 +1,31 @@
+
+ 4.0.0
+ core-java-9-streams
+ 0.1.0-SNAPSHOT
+ core-java-9-streams
+ jar
+
+
+ com.baeldung
+ parent-java
+ 0.0.1-SNAPSHOT
+ ../../parent-java
+
+
+
+
+
+
+ core-java-9-streams
+
+
+ src/main/resources
+ true
+
+
+
+
+
+
+
diff --git a/java-streams-2/src/main/java/com/baeldung/breakforeach/CustomForEach.java b/core-java-modules/core-java-9-streams/src/main/java/com/baeldung/streams/breakforeach/CustomForEach.java
similarity index 94%
rename from java-streams-2/src/main/java/com/baeldung/breakforeach/CustomForEach.java
rename to core-java-modules/core-java-9-streams/src/main/java/com/baeldung/streams/breakforeach/CustomForEach.java
index 1f8866b16c..357571f092 100644
--- a/java-streams-2/src/main/java/com/baeldung/breakforeach/CustomForEach.java
+++ b/core-java-modules/core-java-9-streams/src/main/java/com/baeldung/streams/breakforeach/CustomForEach.java
@@ -1,4 +1,4 @@
-package com.baeldung.breakforeach;
+package com.baeldung.streams.breakforeach;
import java.util.Spliterator;
import java.util.function.BiConsumer;
diff --git a/java-streams-2/src/main/java/com/baeldung/breakforeach/CustomSpliterator.java b/core-java-modules/core-java-9-streams/src/main/java/com/baeldung/streams/breakforeach/CustomSpliterator.java
similarity index 95%
rename from java-streams-2/src/main/java/com/baeldung/breakforeach/CustomSpliterator.java
rename to core-java-modules/core-java-9-streams/src/main/java/com/baeldung/streams/breakforeach/CustomSpliterator.java
index cfe4bedac3..1844a3dc37 100644
--- a/java-streams-2/src/main/java/com/baeldung/breakforeach/CustomSpliterator.java
+++ b/core-java-modules/core-java-9-streams/src/main/java/com/baeldung/streams/breakforeach/CustomSpliterator.java
@@ -1,4 +1,4 @@
-package com.baeldung.breakforeach;
+package com.baeldung.streams.breakforeach;
import java.util.Spliterator;
import java.util.Spliterators;
diff --git a/java-streams-2/src/main/java/com/baeldung/breakforeach/CustomTakeWhile.java b/core-java-modules/core-java-9-streams/src/main/java/com/baeldung/streams/breakforeach/CustomTakeWhile.java
similarity index 90%
rename from java-streams-2/src/main/java/com/baeldung/breakforeach/CustomTakeWhile.java
rename to core-java-modules/core-java-9-streams/src/main/java/com/baeldung/streams/breakforeach/CustomTakeWhile.java
index 05574f9ae6..1852df3d9c 100644
--- a/java-streams-2/src/main/java/com/baeldung/breakforeach/CustomTakeWhile.java
+++ b/core-java-modules/core-java-9-streams/src/main/java/com/baeldung/streams/breakforeach/CustomTakeWhile.java
@@ -1,4 +1,4 @@
-package com.baeldung.breakforeach;
+package com.baeldung.streams.breakforeach;
import java.util.function.Predicate;
import java.util.stream.Stream;
diff --git a/java-streams-2/src/main/java/com/baeldung/breakforeach/TakeWhileExample.java b/core-java-modules/core-java-9-streams/src/main/java/com/baeldung/streams/breakforeach/TakeWhileExample.java
similarity index 94%
rename from java-streams-2/src/main/java/com/baeldung/breakforeach/TakeWhileExample.java
rename to core-java-modules/core-java-9-streams/src/main/java/com/baeldung/streams/breakforeach/TakeWhileExample.java
index 1838ae5fb7..3a16c9d691 100644
--- a/java-streams-2/src/main/java/com/baeldung/breakforeach/TakeWhileExample.java
+++ b/core-java-modules/core-java-9-streams/src/main/java/com/baeldung/streams/breakforeach/TakeWhileExample.java
@@ -1,4 +1,4 @@
-package com.baeldung.breakforeach;
+package com.baeldung.streams.breakforeach;
import java.util.List;
import java.util.stream.Stream;
diff --git a/java-streams-2/src/test/java/com/baeldung/breakforeach/BreakFromStreamForEachUnitTest.java b/core-java-modules/core-java-9-streams/src/test/java/com/baeldung/streams/breakforeach/BreakFromStreamForEachUnitTest.java
similarity index 96%
rename from java-streams-2/src/test/java/com/baeldung/breakforeach/BreakFromStreamForEachUnitTest.java
rename to core-java-modules/core-java-9-streams/src/test/java/com/baeldung/streams/breakforeach/BreakFromStreamForEachUnitTest.java
index 23653c0a39..66d293b3fa 100644
--- a/java-streams-2/src/test/java/com/baeldung/breakforeach/BreakFromStreamForEachUnitTest.java
+++ b/core-java-modules/core-java-9-streams/src/test/java/com/baeldung/streams/breakforeach/BreakFromStreamForEachUnitTest.java
@@ -1,4 +1,4 @@
-package com.baeldung.breakforeach;
+package com.baeldung.streams.breakforeach;
import org.junit.Test;
diff --git a/core-java-modules/core-java-streams-2/README.md b/core-java-modules/core-java-streams-2/README.md
new file mode 100644
index 0000000000..2ff95045c3
--- /dev/null
+++ b/core-java-modules/core-java-streams-2/README.md
@@ -0,0 +1,16 @@
+## Core Java streams
+
+This module contains articles about the Stream API in Java.
+
+### Relevant Articles:
+- [The Java 8 Stream API Tutorial](https://www.baeldung.com/java-8-streams)
+- [Introduction to Java 8 Streams](https://www.baeldung.com/java-8-streams-introduction)
+- [Java 8 Stream findFirst() vs. findAny()](https://www.baeldung.com/java-stream-findfirst-vs-findany)
+- [Guide to Stream.reduce()](https://www.baeldung.com/java-stream-reduce)
+- [Java IntStream Conversions](https://www.baeldung.com/java-intstream-convert)
+- [Java 8 Streams peek() API](https://www.baeldung.com/java-streams-peek-api)
+- [Working With Maps Using Streams](https://www.baeldung.com/java-maps-streams)
+- [Collect a Java Stream to an Immutable Collection](https://www.baeldung.com/java-stream-immutable-collection)
+- [How to Add a Single Element to a Stream](https://www.baeldung.com/java-stream-append-prepend)
+- [Operating on and Removing an Item from Stream](https://www.baeldung.com/java-use-remove-item-stream)
+- More articles: [[<-- prev>]](/../core-java-streams) [[next -->]](/../core-java-streams-3)
diff --git a/java-streams-2/pom.xml b/core-java-modules/core-java-streams-2/pom.xml
similarity index 84%
rename from java-streams-2/pom.xml
rename to core-java-modules/core-java-streams-2/pom.xml
index 4cebd44427..20c028edaa 100644
--- a/java-streams-2/pom.xml
+++ b/core-java-modules/core-java-streams-2/pom.xml
@@ -1,49 +1,53 @@
-
-
- 4.0.0
- com.baeldung.javastreams2
- java-streams-2
- 1.0
- java-streams-2
- jar
-
-
- com.baeldung
- parent-java
- 0.0.1-SNAPSHOT
- ../parent-java
-
-
-
-
- org.openjdk.jmh
- jmh-core
- ${jmh-core.version}
-
-
- org.openjdk.jmh
- jmh-generator-annprocess
- ${jmh-generator.version}
-
-
- junit
- junit
- ${junit.version}
- test
- jar
-
-
- org.assertj
- assertj-core
- ${assertj.version}
- test
-
-
-
-
- UTF-8
- 1.9
- 1.9
- 3.11.1
-
+
+
+ 4.0.0
+ core-java-streams-2
+ 1.0
+ core-java-streams-2
+ jar
+
+
+ com.baeldung
+ parent-java
+ 0.0.1-SNAPSHOT
+ ../../parent-java
+
+
+
+
+ org.openjdk.jmh
+ jmh-core
+ ${jmh-core.version}
+
+
+ org.openjdk.jmh
+ jmh-generator-annprocess
+ ${jmh-generator.version}
+
+
+ log4j
+ log4j
+ ${log4j.version}
+
+
+ junit
+ junit
+ ${junit.version}
+ test
+ jar
+
+
+ org.assertj
+ assertj-core
+ ${assertj.version}
+ test
+
+
+
+
+ UTF-8
+ 1.9
+ 1.9
+ 3.11.1
+
\ No newline at end of file
diff --git a/java-streams-2/src/main/java/com/baeldung/reduce/application/Application.java b/core-java-modules/core-java-streams-2/src/main/java/com/baeldung/reduce/application/Application.java
similarity index 97%
rename from java-streams-2/src/main/java/com/baeldung/reduce/application/Application.java
rename to core-java-modules/core-java-streams-2/src/main/java/com/baeldung/reduce/application/Application.java
index 79c557524d..62d080c32c 100644
--- a/java-streams-2/src/main/java/com/baeldung/reduce/application/Application.java
+++ b/core-java-modules/core-java-streams-2/src/main/java/com/baeldung/reduce/application/Application.java
@@ -1,39 +1,39 @@
-package com.baeldung.reduce.application;
-
-import com.baeldung.reduce.entities.User;
-import com.baeldung.reduce.utilities.NumberUtils;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-
-public class Application {
-
- public static void main(String[] args) {
- List numbers = Arrays.asList(1, 2, 3, 4, 5, 6);
- int result1 = numbers.stream().reduce(0, (subtotal, element) -> subtotal + element);
- System.out.println(result1);
-
- int result2 = numbers.stream().reduce(0, Integer::sum);
- System.out.println(result2);
-
- List letters = Arrays.asList("a", "b", "c", "d", "e");
- String result3 = letters.stream().reduce("", (partialString, element) -> partialString + element);
- System.out.println(result3);
-
- String result4 = letters.stream().reduce("", String::concat);
- System.out.println(result4);
-
- String result5 = letters.stream().reduce("", (partialString, element) -> partialString.toUpperCase() + element.toUpperCase());
- System.out.println(result5);
-
- List users = Arrays.asList(new User("John", 30), new User("Julie", 35));
- int result6 = users.stream().reduce(0, (partialAgeResult, user) -> partialAgeResult + user.getAge(), Integer::sum);
- System.out.println(result6);
-
- String result7 = letters.parallelStream().reduce("", String::concat);
- System.out.println(result7);
-
- int result8 = users.parallelStream().reduce(0, (partialAgeResult, user) -> partialAgeResult + user.getAge(), Integer::sum);
- System.out.println(result8);
- }
-}
+package com.baeldung.reduce.application;
+
+import com.baeldung.reduce.entities.User;
+import com.baeldung.reduce.utilities.NumberUtils;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+public class Application {
+
+ public static void main(String[] args) {
+ List numbers = Arrays.asList(1, 2, 3, 4, 5, 6);
+ int result1 = numbers.stream().reduce(0, (subtotal, element) -> subtotal + element);
+ System.out.println(result1);
+
+ int result2 = numbers.stream().reduce(0, Integer::sum);
+ System.out.println(result2);
+
+ List letters = Arrays.asList("a", "b", "c", "d", "e");
+ String result3 = letters.stream().reduce("", (partialString, element) -> partialString + element);
+ System.out.println(result3);
+
+ String result4 = letters.stream().reduce("", String::concat);
+ System.out.println(result4);
+
+ String result5 = letters.stream().reduce("", (partialString, element) -> partialString.toUpperCase() + element.toUpperCase());
+ System.out.println(result5);
+
+ List users = Arrays.asList(new User("John", 30), new User("Julie", 35));
+ int result6 = users.stream().reduce(0, (partialAgeResult, user) -> partialAgeResult + user.getAge(), Integer::sum);
+ System.out.println(result6);
+
+ String result7 = letters.parallelStream().reduce("", String::concat);
+ System.out.println(result7);
+
+ int result8 = users.parallelStream().reduce(0, (partialAgeResult, user) -> partialAgeResult + user.getAge(), Integer::sum);
+ System.out.println(result8);
+ }
+}
diff --git a/java-streams-2/src/main/java/com/baeldung/reduce/benchmarks/JMHStreamReduceBenchMark.java b/core-java-modules/core-java-streams-2/src/main/java/com/baeldung/reduce/benchmarks/JMHStreamReduceBenchMark.java
similarity index 97%
rename from java-streams-2/src/main/java/com/baeldung/reduce/benchmarks/JMHStreamReduceBenchMark.java
rename to core-java-modules/core-java-streams-2/src/main/java/com/baeldung/reduce/benchmarks/JMHStreamReduceBenchMark.java
index af4a9276a9..ecb0347e96 100644
--- a/java-streams-2/src/main/java/com/baeldung/reduce/benchmarks/JMHStreamReduceBenchMark.java
+++ b/core-java-modules/core-java-streams-2/src/main/java/com/baeldung/reduce/benchmarks/JMHStreamReduceBenchMark.java
@@ -1,52 +1,52 @@
-package com.baeldung.reduce.benchmarks;
-
-import com.baeldung.reduce.entities.User;
-import java.util.ArrayList;
-import java.util.List;
-import org.openjdk.jmh.annotations.Benchmark;
-import org.openjdk.jmh.annotations.BenchmarkMode;
-import org.openjdk.jmh.annotations.Mode;
-import org.openjdk.jmh.annotations.Scope;
-import org.openjdk.jmh.annotations.State;
-import org.openjdk.jmh.runner.Runner;
-import org.openjdk.jmh.runner.RunnerException;
-import org.openjdk.jmh.runner.options.Options;
-import org.openjdk.jmh.runner.options.OptionsBuilder;
-
-@State(Scope.Thread)
-@BenchmarkMode(Mode.AverageTime)
-public class JMHStreamReduceBenchMark {
-
- private final List userList = createUsers();
-
- public static void main(String[] args) throws RunnerException {
-
- Options options = new OptionsBuilder()
- .include(JMHStreamReduceBenchMark.class.getSimpleName()).threads(1)
- .forks(1).shouldFailOnError(true).shouldDoGC(true)
- .jvmArgs("-server").build();
- new Runner(options).run();
- }
-
- private List createUsers() {
- List users = new ArrayList<>();
- for (int i = 0; i <= 1000000; i++) {
- users.add(new User("John" + i, i));
- }
- return users;
- }
-
- @Benchmark
- public Integer executeReduceOnParallelizedStream() {
- return this.userList
- .parallelStream()
- .reduce(0, (partialAgeResult, user) -> partialAgeResult + user.getAge(), Integer::sum);
- }
-
- @Benchmark
- public Integer executeReduceOnSequentialStream() {
- return this.userList
- .stream()
- .reduce(0, (partialAgeResult, user) -> partialAgeResult + user.getAge(), Integer::sum);
- }
-}
+package com.baeldung.reduce.benchmarks;
+
+import com.baeldung.reduce.entities.User;
+import java.util.ArrayList;
+import java.util.List;
+import org.openjdk.jmh.annotations.Benchmark;
+import org.openjdk.jmh.annotations.BenchmarkMode;
+import org.openjdk.jmh.annotations.Mode;
+import org.openjdk.jmh.annotations.Scope;
+import org.openjdk.jmh.annotations.State;
+import org.openjdk.jmh.runner.Runner;
+import org.openjdk.jmh.runner.RunnerException;
+import org.openjdk.jmh.runner.options.Options;
+import org.openjdk.jmh.runner.options.OptionsBuilder;
+
+@State(Scope.Thread)
+@BenchmarkMode(Mode.AverageTime)
+public class JMHStreamReduceBenchMark {
+
+ private final List userList = createUsers();
+
+ public static void main(String[] args) throws RunnerException {
+
+ Options options = new OptionsBuilder()
+ .include(JMHStreamReduceBenchMark.class.getSimpleName()).threads(1)
+ .forks(1).shouldFailOnError(true).shouldDoGC(true)
+ .jvmArgs("-server").build();
+ new Runner(options).run();
+ }
+
+ private List createUsers() {
+ List users = new ArrayList<>();
+ for (int i = 0; i <= 1000000; i++) {
+ users.add(new User("John" + i, i));
+ }
+ return users;
+ }
+
+ @Benchmark
+ public Integer executeReduceOnParallelizedStream() {
+ return this.userList
+ .parallelStream()
+ .reduce(0, (partialAgeResult, user) -> partialAgeResult + user.getAge(), Integer::sum);
+ }
+
+ @Benchmark
+ public Integer executeReduceOnSequentialStream() {
+ return this.userList
+ .stream()
+ .reduce(0, (partialAgeResult, user) -> partialAgeResult + user.getAge(), Integer::sum);
+ }
+}
diff --git a/java-streams/src/main/java/com/baeldung/reduce/entities/User.java b/core-java-modules/core-java-streams-2/src/main/java/com/baeldung/reduce/entities/User.java
similarity index 94%
rename from java-streams/src/main/java/com/baeldung/reduce/entities/User.java
rename to core-java-modules/core-java-streams-2/src/main/java/com/baeldung/reduce/entities/User.java
index a17c6a02b6..6e0a529de6 100644
--- a/java-streams/src/main/java/com/baeldung/reduce/entities/User.java
+++ b/core-java-modules/core-java-streams-2/src/main/java/com/baeldung/reduce/entities/User.java
@@ -1,25 +1,25 @@
-package com.baeldung.reduce.entities;
-
-public class User {
-
- private final String name;
- private final int age;
-
- public User(String name, int age) {
- this.name = name;
- this.age = age;
- }
-
- public String getName() {
- return name;
- }
-
- public int getAge() {
- return age;
- }
-
- @Override
- public String toString() {
- return "User{" + "name=" + name + ", age=" + age + '}';
- }
-}
+package com.baeldung.reduce.entities;
+
+public class User {
+
+ private final String name;
+ private final int age;
+
+ public User(String name, int age) {
+ this.name = name;
+ this.age = age;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public int getAge() {
+ return age;
+ }
+
+ @Override
+ public String toString() {
+ return "User{" + "name=" + name + ", age=" + age + '}';
+ }
+}
diff --git a/java-streams-2/src/main/java/com/baeldung/reduce/utilities/NumberUtils.java b/core-java-modules/core-java-streams-2/src/main/java/com/baeldung/reduce/utilities/NumberUtils.java
similarity index 97%
rename from java-streams-2/src/main/java/com/baeldung/reduce/utilities/NumberUtils.java
rename to core-java-modules/core-java-streams-2/src/main/java/com/baeldung/reduce/utilities/NumberUtils.java
index a7a4b8df29..38d5b50120 100644
--- a/java-streams-2/src/main/java/com/baeldung/reduce/utilities/NumberUtils.java
+++ b/core-java-modules/core-java-streams-2/src/main/java/com/baeldung/reduce/utilities/NumberUtils.java
@@ -1,52 +1,52 @@
-package com.baeldung.reduce.utilities;
-
-import java.util.List;
-import java.util.function.BiFunction;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-public abstract class NumberUtils {
-
- private static final Logger LOGGER = Logger.getLogger(NumberUtils.class.getName());
-
- public static int divideListElements(List values, Integer divider) {
- return values.stream()
- .reduce(0, (a, b) -> {
- try {
- return a / divider + b / divider;
- } catch (ArithmeticException e) {
- LOGGER.log(Level.INFO, "Arithmetic Exception: Division by Zero");
- }
- return 0;
- });
- }
-
- public static int divideListElementsWithExtractedTryCatchBlock(List values, int divider) {
- return values.stream().reduce(0, (a, b) -> divide(a, divider) + divide(b, divider));
- }
-
- public static int divideListElementsWithApplyFunctionMethod(List values, int divider) {
- BiFunction division = (a, b) -> a / b;
- return values.stream().reduce(0, (a, b) -> applyFunction(division, a, divider) + applyFunction(division, b, divider));
- }
-
- private static int divide(int value, int factor) {
- int result = 0;
- try {
- result = value / factor;
- } catch (ArithmeticException e) {
- LOGGER.log(Level.INFO, "Arithmetic Exception: Division by Zero");
- }
- return result;
- }
-
- private static int applyFunction(BiFunction function, int a, int b) {
- try {
- return function.apply(a, b);
- }
- catch(Exception e) {
- LOGGER.log(Level.INFO, "Exception thrown!");
- }
- return 0;
- }
-}
+package com.baeldung.reduce.utilities;
+
+import java.util.List;
+import java.util.function.BiFunction;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+public abstract class NumberUtils {
+
+ private static final Logger LOGGER = Logger.getLogger(NumberUtils.class.getName());
+
+ public static int divideListElements(List values, Integer divider) {
+ return values.stream()
+ .reduce(0, (a, b) -> {
+ try {
+ return a / divider + b / divider;
+ } catch (ArithmeticException e) {
+ LOGGER.log(Level.INFO, "Arithmetic Exception: Division by Zero");
+ }
+ return 0;
+ });
+ }
+
+ public static int divideListElementsWithExtractedTryCatchBlock(List values, int divider) {
+ return values.stream().reduce(0, (a, b) -> divide(a, divider) + divide(b, divider));
+ }
+
+ public static int divideListElementsWithApplyFunctionMethod(List values, int divider) {
+ BiFunction division = (a, b) -> a / b;
+ return values.stream().reduce(0, (a, b) -> applyFunction(division, a, divider) + applyFunction(division, b, divider));
+ }
+
+ private static int divide(int value, int factor) {
+ int result = 0;
+ try {
+ result = value / factor;
+ } catch (ArithmeticException e) {
+ LOGGER.log(Level.INFO, "Arithmetic Exception: Division by Zero");
+ }
+ return result;
+ }
+
+ private static int applyFunction(BiFunction function, int a, int b) {
+ try {
+ return function.apply(a, b);
+ }
+ catch(Exception e) {
+ LOGGER.log(Level.INFO, "Exception thrown!");
+ }
+ return 0;
+ }
+}
diff --git a/java-streams/src/test/java/com/baeldung/stream/mycollectors/MyImmutableListCollector.java b/core-java-modules/core-java-streams-2/src/main/java/com/baeldung/streams/MyImmutableListCollector.java
similarity index 93%
rename from java-streams/src/test/java/com/baeldung/stream/mycollectors/MyImmutableListCollector.java
rename to core-java-modules/core-java-streams-2/src/main/java/com/baeldung/streams/MyImmutableListCollector.java
index cf6b3601c3..6d515bfb46 100644
--- a/java-streams/src/test/java/com/baeldung/stream/mycollectors/MyImmutableListCollector.java
+++ b/core-java-modules/core-java-streams-2/src/main/java/com/baeldung/streams/MyImmutableListCollector.java
@@ -1,4 +1,4 @@
-package com.baeldung.stream.mycollectors;
+package com.baeldung.streams;
import java.util.ArrayList;
import java.util.Collections;
diff --git a/java-streams/src/main/resources/logback.xml b/core-java-modules/core-java-streams-2/src/main/resources/logback.xml
similarity index 100%
rename from java-streams/src/main/resources/logback.xml
rename to core-java-modules/core-java-streams-2/src/main/resources/logback.xml
diff --git a/java-streams-2/src/test/java/com/baeldung/convert/intstreams/IntStreamsConversionsUnitTest.java b/core-java-modules/core-java-streams-2/src/test/java/com/baeldung/convert/intstreams/IntStreamsConversionsUnitTest.java
similarity index 100%
rename from java-streams-2/src/test/java/com/baeldung/convert/intstreams/IntStreamsConversionsUnitTest.java
rename to core-java-modules/core-java-streams-2/src/test/java/com/baeldung/convert/intstreams/IntStreamsConversionsUnitTest.java
diff --git a/java-streams-2/src/test/java/com/baeldung/reduce/tests/StreamReduceUnitTest.java b/core-java-modules/core-java-streams-2/src/test/java/com/baeldung/reduce/StreamReduceUnitTest.java
similarity index 95%
rename from java-streams-2/src/test/java/com/baeldung/reduce/tests/StreamReduceUnitTest.java
rename to core-java-modules/core-java-streams-2/src/test/java/com/baeldung/reduce/StreamReduceUnitTest.java
index 564d614017..21eedf953e 100644
--- a/java-streams-2/src/test/java/com/baeldung/reduce/tests/StreamReduceUnitTest.java
+++ b/core-java-modules/core-java-streams-2/src/test/java/com/baeldung/reduce/StreamReduceUnitTest.java
@@ -1,79 +1,80 @@
-package com.baeldung.reduce.tests;
-
-import com.baeldung.reduce.entities.User;
-import com.baeldung.reduce.utilities.NumberUtils;
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.List;
-import static org.assertj.core.api.Assertions.assertThat;
-import org.junit.Test;
-
-public class StreamReduceUnitTest {
-
- @Test
- public void givenIntegerList_whenReduceWithSumAccumulatorLambda_thenCorrect() {
- List numbers = Arrays.asList(1, 2, 3, 4, 5, 6);
- int result = numbers.stream().reduce(0, (subtotal, element) -> subtotal + element);
- assertThat(result).isEqualTo(21);
- }
-
- @Test
- public void givenIntegerList_whenReduceWithSumAccumulatorMethodReference_thenCorrect() {
- List numbers = Arrays.asList(1, 2, 3, 4, 5, 6);
- int result = numbers.stream().reduce(0, Integer::sum);
- assertThat(result).isEqualTo(21);
- }
-
- @Test
- public void givenStringList_whenReduceWithConcatenatorAccumulatorLambda_thenCorrect() {
- List letters = Arrays.asList("a", "b", "c", "d", "e");
- String result = letters.stream().reduce("", (partialString, element) -> partialString + element);
- assertThat(result).isEqualTo("abcde");
- }
-
- @Test
- public void givenStringList_whenReduceWithConcatenatorAccumulatorMethodReference_thenCorrect() {
- List letters = Arrays.asList("a", "b", "c", "d", "e");
- String result = letters.stream().reduce("", String::concat);
- assertThat(result).isEqualTo("abcde");
- }
-
- @Test
- public void givenStringList_whenReduceWithUppercaseConcatenatorAccumulator_thenCorrect() {
- List letters = Arrays.asList("a", "b", "c", "d", "e");
- String result = letters.stream().reduce("", (partialString, element) -> partialString.toUpperCase() + element.toUpperCase());
- assertThat(result).isEqualTo("ABCDE");
- }
-
- @Test
- public void givenUserList_whenReduceWithAgeAccumulatorAndSumCombiner_thenCorrect() {
- List users = Arrays.asList(new User("John", 30), new User("Julie", 35));
- int result = users.stream().reduce(0, (partialAgeResult, user) -> partialAgeResult + user.getAge(), Integer::sum);
- assertThat(result).isEqualTo(65);
- }
-
- @Test
- public void givenStringList_whenReduceWithParallelStream_thenCorrect() {
- List letters = Arrays.asList("a", "b", "c", "d", "e");
- String result = letters.parallelStream().reduce("", String::concat);
- assertThat(result).isEqualTo("abcde");
- }
-
- @Test
- public void givenNumberUtilsClass_whenCalledDivideListElements_thenCorrect() {
- List numbers = Arrays.asList(1, 2, 3, 4, 5, 6);
- assertThat(NumberUtils.divideListElements(numbers, 1)).isEqualTo(21);
- }
-
- @Test
- public void givenNumberUtilsClass_whenCalledDivideListElementsWithExtractedTryCatchBlock_thenCorrect() {
- List numbers = Arrays.asList(1, 2, 3, 4, 5, 6);
- assertThat(NumberUtils.divideListElementsWithExtractedTryCatchBlock(numbers, 1)).isEqualTo(21);
- }
-
- @Test
- public void givenStream_whneCalleddivideListElementsWithApplyFunctionMethod_thenCorrect() {
- List numbers = Arrays.asList(1, 2, 3, 4, 5, 6);
- assertThat(NumberUtils.divideListElementsWithApplyFunctionMethod(numbers, 1)).isEqualTo(21);
- }
-}
+package com.baeldung.reduce;
+
+import com.baeldung.reduce.entities.User;
+import com.baeldung.reduce.utilities.NumberUtils;
+import org.junit.Test;
+
+import java.util.Arrays;
+import java.util.List;
+
+import static org.assertj.core.api.Assertions.assertThat;
+
+public class StreamReduceUnitTest {
+
+ @Test
+ public void givenIntegerList_whenReduceWithSumAccumulatorLambda_thenCorrect() {
+ List numbers = Arrays.asList(1, 2, 3, 4, 5, 6);
+ int result = numbers.stream().reduce(0, (subtotal, element) -> subtotal + element);
+ assertThat(result).isEqualTo(21);
+ }
+
+ @Test
+ public void givenIntegerList_whenReduceWithSumAccumulatorMethodReference_thenCorrect() {
+ List numbers = Arrays.asList(1, 2, 3, 4, 5, 6);
+ int result = numbers.stream().reduce(0, Integer::sum);
+ assertThat(result).isEqualTo(21);
+ }
+
+ @Test
+ public void givenStringList_whenReduceWithConcatenatorAccumulatorLambda_thenCorrect() {
+ List letters = Arrays.asList("a", "b", "c", "d", "e");
+ String result = letters.stream().reduce("", (partialString, element) -> partialString + element);
+ assertThat(result).isEqualTo("abcde");
+ }
+
+ @Test
+ public void givenStringList_whenReduceWithConcatenatorAccumulatorMethodReference_thenCorrect() {
+ List letters = Arrays.asList("a", "b", "c", "d", "e");
+ String result = letters.stream().reduce("", String::concat);
+ assertThat(result).isEqualTo("abcde");
+ }
+
+ @Test
+ public void givenStringList_whenReduceWithUppercaseConcatenatorAccumulator_thenCorrect() {
+ List letters = Arrays.asList("a", "b", "c", "d", "e");
+ String result = letters.stream().reduce("", (partialString, element) -> partialString.toUpperCase() + element.toUpperCase());
+ assertThat(result).isEqualTo("ABCDE");
+ }
+
+ @Test
+ public void givenUserList_whenReduceWithAgeAccumulatorAndSumCombiner_thenCorrect() {
+ List users = Arrays.asList(new User("John", 30), new User("Julie", 35));
+ int result = users.stream().reduce(0, (partialAgeResult, user) -> partialAgeResult + user.getAge(), Integer::sum);
+ assertThat(result).isEqualTo(65);
+ }
+
+ @Test
+ public void givenStringList_whenReduceWithParallelStream_thenCorrect() {
+ List letters = Arrays.asList("a", "b", "c", "d", "e");
+ String result = letters.parallelStream().reduce("", String::concat);
+ assertThat(result).isEqualTo("abcde");
+ }
+
+ @Test
+ public void givenNumberUtilsClass_whenCalledDivideListElements_thenCorrect() {
+ List numbers = Arrays.asList(1, 2, 3, 4, 5, 6);
+ assertThat(NumberUtils.divideListElements(numbers, 1)).isEqualTo(21);
+ }
+
+ @Test
+ public void givenNumberUtilsClass_whenCalledDivideListElementsWithExtractedTryCatchBlock_thenCorrect() {
+ List numbers = Arrays.asList(1, 2, 3, 4, 5, 6);
+ assertThat(NumberUtils.divideListElementsWithExtractedTryCatchBlock(numbers, 1)).isEqualTo(21);
+ }
+
+ @Test
+ public void givenStream_whneCalleddivideListElementsWithApplyFunctionMethod_thenCorrect() {
+ List numbers = Arrays.asList(1, 2, 3, 4, 5, 6);
+ assertThat(NumberUtils.divideListElementsWithApplyFunctionMethod(numbers, 1)).isEqualTo(21);
+ }
+}
diff --git a/java-streams/src/main/java/com/baeldung/java_8_features/Detail.java b/core-java-modules/core-java-streams-2/src/test/java/com/baeldung/streams/Detail.java
similarity index 85%
rename from java-streams/src/main/java/com/baeldung/java_8_features/Detail.java
rename to core-java-modules/core-java-streams-2/src/test/java/com/baeldung/streams/Detail.java
index 811937dba7..d2f5774b24 100644
--- a/java-streams/src/main/java/com/baeldung/java_8_features/Detail.java
+++ b/core-java-modules/core-java-streams-2/src/test/java/com/baeldung/streams/Detail.java
@@ -1,4 +1,4 @@
-package com.baeldung.java_8_features;
+package com.baeldung.streams;
import java.util.Arrays;
import java.util.List;
diff --git a/java-streams/src/test/java/com/baeldung/java8/streams/Java8FindAnyFindFirstUnitTest.java b/core-java-modules/core-java-streams-2/src/test/java/com/baeldung/streams/Java8FindAnyFindFirstUnitTest.java
similarity index 97%
rename from java-streams/src/test/java/com/baeldung/java8/streams/Java8FindAnyFindFirstUnitTest.java
rename to core-java-modules/core-java-streams-2/src/test/java/com/baeldung/streams/Java8FindAnyFindFirstUnitTest.java
index 5f52fe375e..934d7b3542 100644
--- a/java-streams/src/test/java/com/baeldung/java8/streams/Java8FindAnyFindFirstUnitTest.java
+++ b/core-java-modules/core-java-streams-2/src/test/java/com/baeldung/streams/Java8FindAnyFindFirstUnitTest.java
@@ -1,4 +1,4 @@
-package com.baeldung.java8.streams;
+package com.baeldung.streams;
import org.junit.Test;
diff --git a/java-streams/src/test/java/com/baeldung/java8/streams/Java8StreamApiUnitTest.java b/core-java-modules/core-java-streams-2/src/test/java/com/baeldung/streams/Java8StreamApiUnitTest.java
similarity index 99%
rename from java-streams/src/test/java/com/baeldung/java8/streams/Java8StreamApiUnitTest.java
rename to core-java-modules/core-java-streams-2/src/test/java/com/baeldung/streams/Java8StreamApiUnitTest.java
index 75cfbc049f..c4e1f2b3cb 100644
--- a/java-streams/src/test/java/com/baeldung/java8/streams/Java8StreamApiUnitTest.java
+++ b/core-java-modules/core-java-streams-2/src/test/java/com/baeldung/streams/Java8StreamApiUnitTest.java
@@ -1,6 +1,5 @@
-package com.baeldung.java8.streams;
+package com.baeldung.streams;
-import com.baeldung.stream.Product;
import org.junit.Before;
import org.junit.Test;
import org.slf4j.Logger;
diff --git a/java-streams/src/test/java/com/baeldung/java8/Java8StreamsUnitTest.java b/core-java-modules/core-java-streams-2/src/test/java/com/baeldung/streams/Java8StreamsUnitTest.java
similarity index 97%
rename from java-streams/src/test/java/com/baeldung/java8/Java8StreamsUnitTest.java
rename to core-java-modules/core-java-streams-2/src/test/java/com/baeldung/streams/Java8StreamsUnitTest.java
index e40f9f9506..f46fa79b08 100644
--- a/java-streams/src/test/java/com/baeldung/java8/Java8StreamsUnitTest.java
+++ b/core-java-modules/core-java-streams-2/src/test/java/com/baeldung/streams/Java8StreamsUnitTest.java
@@ -1,6 +1,5 @@
-package com.baeldung.java8;
+package com.baeldung.streams;
-import com.baeldung.java_8_features.Detail;
import org.junit.Before;
import org.junit.Test;
diff --git a/java-streams/src/test/java/com/baeldung/stream/PeekUnitTest.java b/core-java-modules/core-java-streams-2/src/test/java/com/baeldung/streams/PeekUnitTest.java
similarity index 98%
rename from java-streams/src/test/java/com/baeldung/stream/PeekUnitTest.java
rename to core-java-modules/core-java-streams-2/src/test/java/com/baeldung/streams/PeekUnitTest.java
index a3a2816e9c..97af4149d3 100644
--- a/java-streams/src/test/java/com/baeldung/stream/PeekUnitTest.java
+++ b/core-java-modules/core-java-streams-2/src/test/java/com/baeldung/streams/PeekUnitTest.java
@@ -1,13 +1,13 @@
-package com.baeldung.stream;
+package com.baeldung.streams;
-import static org.assertj.core.api.Assertions.assertThat;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
import java.io.StringWriter;
import java.util.stream.Collectors;
import java.util.stream.Stream;
-import org.junit.jupiter.api.BeforeEach;
-import org.junit.jupiter.api.Test;
+import static org.assertj.core.api.Assertions.assertThat;
public class PeekUnitTest {
diff --git a/java-streams/src/main/java/com/baeldung/stream/Product.java b/core-java-modules/core-java-streams-2/src/test/java/com/baeldung/streams/Product.java
similarity index 96%
rename from java-streams/src/main/java/com/baeldung/stream/Product.java
rename to core-java-modules/core-java-streams-2/src/test/java/com/baeldung/streams/Product.java
index e99a969b81..7883f055a1 100644
--- a/java-streams/src/main/java/com/baeldung/stream/Product.java
+++ b/core-java-modules/core-java-streams-2/src/test/java/com/baeldung/streams/Product.java
@@ -1,4 +1,4 @@
-package com.baeldung.stream;
+package com.baeldung.streams;
import java.util.List;
import java.util.stream.Stream;
diff --git a/java-streams/src/test/java/com/baeldung/stream/StreamAddUnitTest.java b/core-java-modules/core-java-streams-2/src/test/java/com/baeldung/streams/StreamAddUnitTest.java
similarity index 97%
rename from java-streams/src/test/java/com/baeldung/stream/StreamAddUnitTest.java
rename to core-java-modules/core-java-streams-2/src/test/java/com/baeldung/streams/StreamAddUnitTest.java
index d0745b8bc9..1fada26de5 100644
--- a/java-streams/src/test/java/com/baeldung/stream/StreamAddUnitTest.java
+++ b/core-java-modules/core-java-streams-2/src/test/java/com/baeldung/streams/StreamAddUnitTest.java
@@ -1,4 +1,4 @@
-package com.baeldung.stream;
+package com.baeldung.streams;
import org.junit.Test;
diff --git a/java-streams/src/test/java/com/baeldung/stream/StreamMapUnitTest.java b/core-java-modules/core-java-streams-2/src/test/java/com/baeldung/streams/StreamMapUnitTest.java
similarity index 96%
rename from java-streams/src/test/java/com/baeldung/stream/StreamMapUnitTest.java
rename to core-java-modules/core-java-streams-2/src/test/java/com/baeldung/streams/StreamMapUnitTest.java
index 5cb2a274d1..509a3a3569 100644
--- a/java-streams/src/test/java/com/baeldung/stream/StreamMapUnitTest.java
+++ b/core-java-modules/core-java-streams-2/src/test/java/com/baeldung/streams/StreamMapUnitTest.java
@@ -1,16 +1,13 @@
-package com.baeldung.stream;
+package com.baeldung.streams;
import org.junit.Before;
import org.junit.Test;
-import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
-import java.util.Set;
import java.util.stream.Collectors;
-import java.util.stream.Stream;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
diff --git a/java-streams/src/test/java/com/baeldung/stream/StreamToImmutableUnitTest.java b/core-java-modules/core-java-streams-2/src/test/java/com/baeldung/streams/StreamToImmutableUnitTest.java
similarity index 81%
rename from java-streams/src/test/java/com/baeldung/stream/StreamToImmutableUnitTest.java
rename to core-java-modules/core-java-streams-2/src/test/java/com/baeldung/streams/StreamToImmutableUnitTest.java
index bd540201d2..e5339d8327 100644
--- a/java-streams/src/test/java/com/baeldung/stream/StreamToImmutableUnitTest.java
+++ b/core-java-modules/core-java-streams-2/src/test/java/com/baeldung/streams/StreamToImmutableUnitTest.java
@@ -1,20 +1,12 @@
-package com.baeldung.stream;
-
-import static java.util.stream.Collectors.collectingAndThen;
-import static java.util.stream.Collectors.toList;
-import static java.util.stream.Collectors.toSet;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.LinkedList;
-import java.util.List;
-import java.util.stream.IntStream;
+package com.baeldung.streams;
+import com.google.common.collect.ImmutableList;
import org.junit.Test;
-import com.baeldung.stream.mycollectors.MyImmutableListCollector;
-import com.google.common.collect.ImmutableList;
+import java.util.*;
+import java.util.stream.IntStream;
+
+import static java.util.stream.Collectors.*;
public class StreamToImmutableUnitTest {
diff --git a/java-streams/src/test/java/com/baeldung/stream/StreamOperateAndRemoveUnitTest.java b/core-java-modules/core-java-streams-2/src/test/java/com/baeldung/streams/removeitem/StreamOperateAndRemoveUnitTest.java
similarity index 98%
rename from java-streams/src/test/java/com/baeldung/stream/StreamOperateAndRemoveUnitTest.java
rename to core-java-modules/core-java-streams-2/src/test/java/com/baeldung/streams/removeitem/StreamOperateAndRemoveUnitTest.java
index c5aa9a1651..194d0bd4d6 100644
--- a/java-streams/src/test/java/com/baeldung/stream/StreamOperateAndRemoveUnitTest.java
+++ b/core-java-modules/core-java-streams-2/src/test/java/com/baeldung/streams/removeitem/StreamOperateAndRemoveUnitTest.java
@@ -1,9 +1,4 @@
-package com.baeldung.stream;
-
-import java.util.ArrayList;
-import java.util.List;
-import java.util.function.Predicate;
-import java.util.stream.Collectors;
+package com.baeldung.streams.removeitem;
import org.junit.Assert;
import org.junit.Before;
@@ -11,6 +6,11 @@ import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.function.Predicate;
+import java.util.stream.Collectors;
+
public class StreamOperateAndRemoveUnitTest {
private List- itemList;
diff --git a/core-java-modules/core-java-streams-3/README.md b/core-java-modules/core-java-streams-3/README.md
new file mode 100644
index 0000000000..4b2c9ed94c
--- /dev/null
+++ b/core-java-modules/core-java-streams-3/README.md
@@ -0,0 +1,11 @@
+## Core Java streams
+
+This module contains articles about the Stream API in Java.
+
+### Relevant Articles:
+- [The Difference Between map() and flatMap()](https://www.baeldung.com/java-difference-map-and-flatmap)
+- [How to Use if/else Logic in Java 8 Streams](https://www.baeldung.com/java-8-streams-if-else-logic)
+- [The Difference Between Collection.stream().forEach() and Collection.forEach()](https://www.baeldung.com/java-collection-stream-foreach)
+- [Guide to Java 8’s Collectors](https://www.baeldung.com/java-8-collectors)
+- [Primitive Type Streams in Java 8](https://www.baeldung.com/java-8-primitive-streams)
+- More articles: [[<-- prev>]](/../core-java-streams-2)
\ No newline at end of file
diff --git a/core-java-modules/core-java-streams-3/pom.xml b/core-java-modules/core-java-streams-3/pom.xml
new file mode 100644
index 0000000000..b5b21a4368
--- /dev/null
+++ b/core-java-modules/core-java-streams-3/pom.xml
@@ -0,0 +1,53 @@
+
+ 4.0.0
+ core-java-streams-3
+ 0.1.0-SNAPSHOT
+ core-java-streams-3
+ jar
+
+
+ com.baeldung
+ parent-java
+ 0.0.1-SNAPSHOT
+ ../../parent-java
+
+
+
+
+ org.apache.commons
+ commons-lang3
+ ${commons-lang3.version}
+
+
+ org.projectlombok
+ lombok
+ ${lombok.version}
+ provided
+
+
+
+ org.assertj
+ assertj-core
+ ${assertj.version}
+ test
+
+
+
+
+ core-java-streams-3
+
+
+ src/main/resources
+ true
+
+
+
+
+
+
+ 3.6.1
+
+ 2.22.1
+
+
diff --git a/core-java-modules/core-java-streams/src/main/java/com/baeldung/forEach/ReverseList.java b/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/forEach/ReverseList.java
similarity index 98%
rename from core-java-modules/core-java-streams/src/main/java/com/baeldung/forEach/ReverseList.java
rename to core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/forEach/ReverseList.java
index b2ce77a9f6..c4128d9b72 100644
--- a/core-java-modules/core-java-streams/src/main/java/com/baeldung/forEach/ReverseList.java
+++ b/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/forEach/ReverseList.java
@@ -1,4 +1,4 @@
-package com.baeldung.forEach;
+package com.baeldung.streams.forEach;
import java.util.ArrayList;
import java.util.Arrays;
diff --git a/java-streams/src/main/java/com/baeldung/stream/PrimitiveStreams.java b/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/primitivestreams/PrimitiveStreams.java
similarity index 90%
rename from java-streams/src/main/java/com/baeldung/stream/PrimitiveStreams.java
rename to core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/primitivestreams/PrimitiveStreams.java
index b0afb65a35..fb2001f10f 100644
--- a/java-streams/src/main/java/com/baeldung/stream/PrimitiveStreams.java
+++ b/core-java-modules/core-java-streams-3/src/main/java/com/baeldung/streams/primitivestreams/PrimitiveStreams.java
@@ -1,4 +1,4 @@
-package com.baeldung.stream;
+package com.baeldung.streams.primitivestreams;
import java.util.Arrays;
import java.util.stream.IntStream;
diff --git a/core-java-modules/core-java-streams-3/src/main/resources/logback.xml b/core-java-modules/core-java-streams-3/src/main/resources/logback.xml
new file mode 100644
index 0000000000..7d900d8ea8
--- /dev/null
+++ b/core-java-modules/core-java-streams-3/src/main/resources/logback.xml
@@ -0,0 +1,13 @@
+
+
+
+
+ %d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/core-java-modules/core-java-streams/src/test/java/com/baeldung/collectors/Java8CollectorsUnitTest.java b/core-java-modules/core-java-streams-3/src/test/java/com/baeldung/streams/collectors/Java8CollectorsUnitTest.java
similarity index 99%
rename from core-java-modules/core-java-streams/src/test/java/com/baeldung/collectors/Java8CollectorsUnitTest.java
rename to core-java-modules/core-java-streams-3/src/test/java/com/baeldung/streams/collectors/Java8CollectorsUnitTest.java
index e742635758..6afc9f4182 100644
--- a/core-java-modules/core-java-streams/src/test/java/com/baeldung/collectors/Java8CollectorsUnitTest.java
+++ b/core-java-modules/core-java-streams-3/src/test/java/com/baeldung/streams/collectors/Java8CollectorsUnitTest.java
@@ -1,4 +1,4 @@
-package com.baeldung.collectors;
+package com.baeldung.streams.collectors;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
diff --git a/core-java-modules/core-java-streams/src/test/java/com/baeldung/stream/conditional/StreamForEachIfElseUnitTest.java b/core-java-modules/core-java-streams-3/src/test/java/com/baeldung/streams/conditional/StreamForEachIfElseUnitTest.java
similarity index 96%
rename from core-java-modules/core-java-streams/src/test/java/com/baeldung/stream/conditional/StreamForEachIfElseUnitTest.java
rename to core-java-modules/core-java-streams-3/src/test/java/com/baeldung/streams/conditional/StreamForEachIfElseUnitTest.java
index b5d26eb6a8..a49a092864 100644
--- a/core-java-modules/core-java-streams/src/test/java/com/baeldung/stream/conditional/StreamForEachIfElseUnitTest.java
+++ b/core-java-modules/core-java-streams-3/src/test/java/com/baeldung/streams/conditional/StreamForEachIfElseUnitTest.java
@@ -1,4 +1,4 @@
-package com.baeldung.stream.conditional;
+package com.baeldung.streams.conditional;
import java.util.Arrays;
import java.util.List;
diff --git a/java-streams/src/test/java/com/baeldung/stream/PrimitiveStreamsUnitTest.java b/core-java-modules/core-java-streams-3/src/test/java/com/baeldung/streams/primitivestreams/PrimitiveStreamsUnitTest.java
similarity index 98%
rename from java-streams/src/test/java/com/baeldung/stream/PrimitiveStreamsUnitTest.java
rename to core-java-modules/core-java-streams-3/src/test/java/com/baeldung/streams/primitivestreams/PrimitiveStreamsUnitTest.java
index 67954f0bba..18966425e4 100644
--- a/java-streams/src/test/java/com/baeldung/stream/PrimitiveStreamsUnitTest.java
+++ b/core-java-modules/core-java-streams-3/src/test/java/com/baeldung/streams/primitivestreams/PrimitiveStreamsUnitTest.java
@@ -1,14 +1,14 @@
-package com.baeldung.stream;
+package com.baeldung.streams.primitivestreams;
-import static org.junit.Assert.assertEquals;
-import static org.junit.Assert.assertTrue;
+import org.junit.Test;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import java.util.stream.Stream;
-import org.junit.Test;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
public class PrimitiveStreamsUnitTest {
diff --git a/java-streams/.gitignore b/core-java-modules/core-java-streams/.gitignore
similarity index 100%
rename from java-streams/.gitignore
rename to core-java-modules/core-java-streams/.gitignore
diff --git a/core-java-modules/core-java-streams/README.md b/core-java-modules/core-java-streams/README.md
index e97641c221..e556c231fe 100644
--- a/core-java-modules/core-java-streams/README.md
+++ b/core-java-modules/core-java-streams/README.md
@@ -1,9 +1,16 @@
-=========
+## Core Java streams
-## Core Java 8 Cookbooks and Examples
+This module contains articles about the Stream API in Java.
### Relevant Articles:
-- [The Difference Between map() and flatMap()](https://www.baeldung.com/java-difference-map-and-flatmap)
-- [How to Use if/else Logic in Java 8 Streams](https://www.baeldung.com/java-8-streams-if-else-logic)
-- [The Difference Between Collection.stream().forEach() and Collection.forEach()](https://www.baeldung.com/java-collection-stream-foreach)
-- [Guide to Java 8’s Collectors](https://www.baeldung.com/java-8-collectors)
\ No newline at end of file
+- [Java 8 and Infinite Streams](https://www.baeldung.com/java-inifinite-streams)
+- [How to Get the Last Element of a Stream in Java?](https://www.baeldung.com/java-stream-last-element)
+- [“Stream has already been operated upon or closed” Exception in Java](https://www.baeldung.com/java-stream-operated-upon-or-closed-exception)
+- [Iterable to Stream in Java](https://www.baeldung.com/java-iterable-to-stream)
+- [How to Iterate Over a Stream With Indices](https://www.baeldung.com/java-stream-indices)
+- [Stream Ordering in Java](https://www.baeldung.com/java-stream-ordering)
+- [Introduction to Protonpack](https://www.baeldung.com/java-protonpack)
+- [Java Stream Filter with Lambda Expression](https://www.baeldung.com/java-stream-filter-lambda)
+- [Counting Matches on a Stream Filter](https://www.baeldung.com/java-stream-filter-count)
+- [Summing Numbers with Java Streams](https://www.baeldung.com/java-stream-sum)
+- More articles: [[next -->]](/../core-java-streams-2)
\ No newline at end of file
diff --git a/core-java-modules/core-java-streams/pom.xml b/core-java-modules/core-java-streams/pom.xml
index 96d97f3759..9b68c8dded 100644
--- a/core-java-modules/core-java-streams/pom.xml
+++ b/core-java-modules/core-java-streams/pom.xml
@@ -14,6 +14,34 @@
+
+
+ org.openjdk.jmh
+ jmh-core
+ ${jmh-core.version}
+
+
+ org.openjdk.jmh
+ jmh-generator-annprocess
+ ${jmh-generator.version}
+ provided
+
+
+ org.apache.commons
+ commons-lang3
+ ${commons-lang3.version}
+
+
+ log4j
+ log4j
+ ${log4j.version}
+
+
+ org.projectlombok
+ lombok
+ ${lombok.version}
+ provided
+
org.assertj
@@ -21,6 +49,36 @@
${assertj.version}
test
+
+ com.codepoetics
+ protonpack
+ ${protonpack.version}
+
+
+ io.vavr
+ vavr
+ ${vavr.version}
+
+
+ one.util
+ streamex
+ ${streamex.version}
+
+
+ org.aspectj
+ aspectjrt
+ ${asspectj.version}
+
+
+ org.aspectj
+ aspectjweaver
+ ${asspectj.version}
+
+
+ pl.touk
+ throwing-function
+ ${throwing-function.version}
+
@@ -31,10 +89,33 @@
true
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ ${maven-compiler-plugin.version}
+
+ ${maven.compiler.source}
+ ${maven.compiler.target}
+ -parameters
+
+
+
+
+ 0.9.0
+ 1.15
+ 0.6.5
+ 2.10
+ 1.3
- 3.6.1
+ 3.11.1
+ 1.8.9
+ 3.1
+ 1.8
+ 1.8
diff --git a/java-streams/src/main/java/com/baeldung/stream/InfiniteStreams.java b/core-java-modules/core-java-streams/src/main/java/com/baeldung/stream/InfiniteStreams.java
similarity index 100%
rename from java-streams/src/main/java/com/baeldung/stream/InfiniteStreams.java
rename to core-java-modules/core-java-streams/src/main/java/com/baeldung/stream/InfiniteStreams.java
diff --git a/java-streams/src/main/java/com/baeldung/stream/StreamApi.java b/core-java-modules/core-java-streams/src/main/java/com/baeldung/stream/StreamApi.java
similarity index 100%
rename from java-streams/src/main/java/com/baeldung/stream/StreamApi.java
rename to core-java-modules/core-java-streams/src/main/java/com/baeldung/stream/StreamApi.java
diff --git a/java-streams/src/main/java/com/baeldung/stream/StreamIndices.java b/core-java-modules/core-java-streams/src/main/java/com/baeldung/stream/StreamIndices.java
similarity index 100%
rename from java-streams/src/main/java/com/baeldung/stream/StreamIndices.java
rename to core-java-modules/core-java-streams/src/main/java/com/baeldung/stream/StreamIndices.java
diff --git a/java-streams/src/main/java/com/baeldung/stream/filter/Customer.java b/core-java-modules/core-java-streams/src/main/java/com/baeldung/stream/filter/Customer.java
similarity index 100%
rename from java-streams/src/main/java/com/baeldung/stream/filter/Customer.java
rename to core-java-modules/core-java-streams/src/main/java/com/baeldung/stream/filter/Customer.java
diff --git a/java-streams/src/main/java/com/baeldung/stream/sum/ArithmeticUtils.java b/core-java-modules/core-java-streams/src/main/java/com/baeldung/stream/sum/ArithmeticUtils.java
similarity index 94%
rename from java-streams/src/main/java/com/baeldung/stream/sum/ArithmeticUtils.java
rename to core-java-modules/core-java-streams/src/main/java/com/baeldung/stream/sum/ArithmeticUtils.java
index 3170b1fb31..c44aaf8005 100644
--- a/java-streams/src/main/java/com/baeldung/stream/sum/ArithmeticUtils.java
+++ b/core-java-modules/core-java-streams/src/main/java/com/baeldung/stream/sum/ArithmeticUtils.java
@@ -1,8 +1,8 @@
-package com.baeldung.stream.sum;
-
-public class ArithmeticUtils {
-
- public static int add(int a, int b) {
- return a + b;
- }
-}
+package com.baeldung.stream.sum;
+
+public class ArithmeticUtils {
+
+ public static int add(int a, int b) {
+ return a + b;
+ }
+}
diff --git a/java-streams/src/main/java/com/baeldung/stream/sum/Item.java b/core-java-modules/core-java-streams/src/main/java/com/baeldung/stream/sum/Item.java
similarity index 94%
rename from java-streams/src/main/java/com/baeldung/stream/sum/Item.java
rename to core-java-modules/core-java-streams/src/main/java/com/baeldung/stream/sum/Item.java
index 2f162d6eda..28a1737db8 100644
--- a/java-streams/src/main/java/com/baeldung/stream/sum/Item.java
+++ b/core-java-modules/core-java-streams/src/main/java/com/baeldung/stream/sum/Item.java
@@ -1,31 +1,31 @@
-package com.baeldung.stream.sum;
-
-public class Item {
-
- private int id;
- private Integer price;
-
- public Item(int id, Integer price) {
- super();
- this.id = id;
- this.price = price;
- }
-
- // Standard getters and setters
- public long getId() {
- return id;
- }
-
- public void setId(int id) {
- this.id = id;
- }
-
- public Integer getPrice() {
- return price;
- }
-
- public void setPrice(Integer price) {
- this.price = price;
- }
-
-}
+package com.baeldung.stream.sum;
+
+public class Item {
+
+ private int id;
+ private Integer price;
+
+ public Item(int id, Integer price) {
+ super();
+ this.id = id;
+ this.price = price;
+ }
+
+ // Standard getters and setters
+ public long getId() {
+ return id;
+ }
+
+ public void setId(int id) {
+ this.id = id;
+ }
+
+ public Integer getPrice() {
+ return price;
+ }
+
+ public void setPrice(Integer price) {
+ this.price = price;
+ }
+
+}
diff --git a/java-streams/src/main/java/com/baeldung/stream/sum/StreamSumCalculator.java b/core-java-modules/core-java-streams/src/main/java/com/baeldung/stream/sum/StreamSumCalculator.java
similarity index 96%
rename from java-streams/src/main/java/com/baeldung/stream/sum/StreamSumCalculator.java
rename to core-java-modules/core-java-streams/src/main/java/com/baeldung/stream/sum/StreamSumCalculator.java
index 2f63cf8629..ea6459d360 100644
--- a/java-streams/src/main/java/com/baeldung/stream/sum/StreamSumCalculator.java
+++ b/core-java-modules/core-java-streams/src/main/java/com/baeldung/stream/sum/StreamSumCalculator.java
@@ -1,59 +1,59 @@
-package com.baeldung.stream.sum;
-
-import java.util.Arrays;
-import java.util.List;
-import java.util.Map;
-import java.util.stream.Collectors;
-
-public class StreamSumCalculator {
-
- public static Integer getSumUsingCustomizedAccumulator(List integers) {
- return integers.stream()
- .reduce(0, ArithmeticUtils::add);
-
- }
-
- public static Integer getSumUsingJavaAccumulator(List integers) {
- return integers.stream()
- .reduce(0, Integer::sum);
-
- }
-
- public static Integer getSumUsingReduce(List integers) {
- return integers.stream()
- .reduce(0, (a, b) -> a + b);
-
- }
-
- public static Integer getSumUsingCollect(List integers) {
-
- return integers.stream()
- .collect(Collectors.summingInt(Integer::intValue));
-
- }
-
- public static Integer getSumUsingSum(List integers) {
-
- return integers.stream()
- .mapToInt(Integer::intValue)
- .sum();
- }
-
- public static Integer getSumOfMapValues(Map