diff --git a/core-java-modules/core-java-loops/README.md b/core-java-modules/core-java-loops/README.md
new file mode 100644
index 0000000000..5616cce48b
--- /dev/null
+++ b/core-java-modules/core-java-loops/README.md
@@ -0,0 +1 @@
+## Relevant Articles
diff --git a/core-java-modules/core-java-loops/pom.xml b/core-java-modules/core-java-loops/pom.xml
new file mode 100644
index 0000000000..c9ce86f54b
--- /dev/null
+++ b/core-java-modules/core-java-loops/pom.xml
@@ -0,0 +1,16 @@
+
+
+ 4.0.0
+ core-java-loops
+ core-java-loops
+ jar
+
+
+ com.baeldung.core-java-modules
+ core-java-modules
+ 0.0.1-SNAPSHOT
+
+
+
diff --git a/core-java-modules/core-java-loops/src/test/java/com/baeldung/loops/TheLastIterationInForEachUnitTest.java b/core-java-modules/core-java-loops/src/test/java/com/baeldung/loops/TheLastIterationInForEachUnitTest.java
new file mode 100644
index 0000000000..e8e20d4db7
--- /dev/null
+++ b/core-java-modules/core-java-loops/src/test/java/com/baeldung/loops/TheLastIterationInForEachUnitTest.java
@@ -0,0 +1,93 @@
+package com.baeldung.loops;
+
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.stream.IntStream;
+
+import org.junit.jupiter.api.Test;
+
+public class TheLastIterationInForEachUnitTest {
+
+ //@formatter:off
+ private static final List MOVIES = List.of(
+ "Titanic",
+ "The Deer Hunter",
+ "Lord of the Rings",
+ "One Flew Over the Cuckoo's Nest",
+ "No Country For Old Men");
+ //@formatter:on
+
+ @Test
+ void whenUsingForEach_thenGetTheLastElementAfterTheLoop() {
+ String myLastMovie = "";
+ for (String movie : MOVIES) {
+ // ... work with movie
+ myLastMovie = movie;
+ }
+ assertEquals("No Country For Old Men", myLastMovie);
+ }
+
+ @Test
+ void whenLoopingWithIndexes_thenGetExpectedResult() {
+ int size = MOVIES.size();
+ String myLastMovie = null;
+ for (int i = 0; i < size; i++) {
+ String movie = MOVIES.get(i);
+ // ... work with movie
+ if (i == size - 1) {
+ myLastMovie = movie;
+ }
+ }
+ assertEquals("No Country For Old Men", myLastMovie);
+ }
+
+ @Test
+ void whenUsingIntStream_thenGetExpectedResult() {
+ int size = MOVIES.size();
+ final Map myLastMovie = new HashMap<>();
+ IntStream.range(0, size)
+ .forEach(idx -> {
+ String movie = MOVIES.get(idx);
+ // ... work with movie
+ if (idx == size - 1) {
+ myLastMovie.put(idx, movie);
+ }
+ });
+ assertEquals(1, myLastMovie.size());
+ assertTrue(myLastMovie.containsKey(size - 1));
+ assertTrue(myLastMovie.containsValue("No Country For Old Men"));
+ }
+
+ @Test
+ void whenUsingCounter_thenGetExpectedResult() {
+ int size = MOVIES.size();
+ String myLastMovie = null;
+ int cnt = 0;
+ for (String movie : MOVIES) {
+ // ... work with movie
+ if (++cnt == size) {
+ myLastMovie = movie;
+ }
+ }
+ assertEquals("No Country For Old Men", myLastMovie);
+ }
+
+ @Test
+ void whenUsingIterator_thenGetExpectedResult() {
+ String movie;
+ String myLastMovie = null;
+ for (Iterator it = MOVIES.iterator(); it.hasNext(); ) {
+ movie = it.next();
+ // ... work with movie
+ if (!it.hasNext()) { // the last element
+ myLastMovie = movie;
+ }
+ }
+ assertEquals("No Country For Old Men", myLastMovie);
+ }
+}
\ No newline at end of file
diff --git a/core-java-modules/pom.xml b/core-java-modules/pom.xml
index d20a1650b9..f16cff3987 100644
--- a/core-java-modules/pom.xml
+++ b/core-java-modules/pom.xml
@@ -155,6 +155,7 @@
core-java-lang-syntax
core-java-lang-syntax-2
core-java-locale
+ core-java-loops
core-java-networking
core-java-networking-2
core-java-networking-4