diff --git a/core-java-modules/core-java-collections-6/README.md b/core-java-modules/core-java-collections-6/README.md
new file mode 100644
index 0000000000..736e91f110
--- /dev/null
+++ b/core-java-modules/core-java-collections-6/README.md
@@ -0,0 +1,7 @@
+=========
+
+## Core Java Collections Cookbooks and Examples
+
+### Relevant Articles:
+
+- More articles: [[<-- prev]](/core-java-modules/core-java-collections-5)
diff --git a/core-java-modules/core-java-collections-6/pom.xml b/core-java-modules/core-java-collections-6/pom.xml
new file mode 100644
index 0000000000..8294a4d76a
--- /dev/null
+++ b/core-java-modules/core-java-collections-6/pom.xml
@@ -0,0 +1,54 @@
+
+
+ core-java-collections-6
+
+
+
+ maven-compiler-plugin
+
+
+ 9
+
+ org.apache.maven.plugins
+
+
+
+
+
+ junit-platform-runner
+ org.junit.platform
+ test
+ ${junit-platform.version}
+
+
+ junit-jupiter
+ org.junit.jupiter
+ test
+ ${junit.version}
+
+
+ junit-vintage-engine
+ org.junit.vintage
+ test
+ ${junit.version}
+
+
+ 4.0.0
+
+ core-java-collections-6
+
+ jar
+
+
+ core-java-modules
+ com.baeldung.core-java-modules
+ 0.0.1-SNAPSHOT
+
+
+
+ 5.10.2
+
+
+
diff --git a/core-java-modules/core-java-collections-6/src/test/java/com/baeldung/iteratorvsforeach/IteratorVsForeachUnitTest.java b/core-java-modules/core-java-collections-6/src/test/java/com/baeldung/iteratorvsforeach/IteratorVsForeachUnitTest.java
new file mode 100644
index 0000000000..a95c1a1e98
--- /dev/null
+++ b/core-java-modules/core-java-collections-6/src/test/java/com/baeldung/iteratorvsforeach/IteratorVsForeachUnitTest.java
@@ -0,0 +1,69 @@
+package com.baeldung.iteratorvsforeach;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertIterableEquals;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.stream.Stream;
+import org.junit.jupiter.api.Test;
+import org.junit.jupiter.params.ParameterizedTest;
+import org.junit.jupiter.params.provider.Arguments;
+import org.junit.jupiter.params.provider.MethodSource;
+
+class IteratorVsForeachUnitTest {
+
+ private static Stream listProvider() {
+ return Stream.of(
+ Arguments.of(
+ List.of("String1", "String2", "unwanted"),
+ List.of("String1", "String2"))
+ );
+ }
+
+ @Test
+ public void givenEmptyCollection_whenUsingForEach_thenNoElementsAreIterated() {
+ List names = Collections.emptyList();
+ StringBuilder stringBuilder = new StringBuilder();
+ names.forEach(stringBuilder::append);
+ assertEquals("", stringBuilder.toString());
+ }
+
+ @ParameterizedTest
+ @MethodSource("listProvider")
+ public void givenCollectionWithElements_whenRemovingElementDuringForEachIteration_thenElementIsRemoved(
+ List input, List expected) {
+ List mutableList = new ArrayList<>(input);
+ // Separate collection for items to be removed
+ List toRemove = new ArrayList<>();
+
+ // Using forEach to identify items to remove
+ input.forEach(item -> {
+ if (item.equals("unwanted")) {
+ toRemove.add(item);
+ }
+ });
+
+ // Removing the identified items from the original list
+ mutableList.removeAll(toRemove);
+ assertIterableEquals(expected, mutableList);
+ }
+
+ @ParameterizedTest
+ @MethodSource("listProvider")
+ public void givenCollectionWithElements_whenRemovingElementDuringIteratorIteration_thenElementIsRemoved(
+ List input, List expected) {
+ List mutableList = new ArrayList<>(input);
+ Iterator it = mutableList.iterator();
+ while (it.hasNext()) {
+ String item = it.next();
+ if (item.equals("unwanted")) {
+ it.remove(); // Safely remove item
+ }
+ }
+ assertIterableEquals(expected, mutableList);
+ }
+
+}
diff --git a/core-java-modules/pom.xml b/core-java-modules/pom.xml
index 3d26d51a6a..56360d0106 100644
--- a/core-java-modules/pom.xml
+++ b/core-java-modules/pom.xml
@@ -89,6 +89,7 @@
core-java-collections-3
core-java-collections-4
core-java-collections-5
+ core-java-collections-6
core-java-collections-conversions
core-java-collections-set-2
core-java-collections-list