From 72b6c786461b657b238944c8b9da4b378fbfc552 Mon Sep 17 00:00:00 2001 From: Kai Yuan Date: Sat, 16 Dec 2023 00:47:36 +0100 Subject: [PATCH] [last-iteration] detect the last iteration (#15414) * [last-iteration] detect the last iteration * [last-iteration] add core-java-loops module --- core-java-modules/core-java-loops/README.md | 1 + core-java-modules/core-java-loops/pom.xml | 16 ++++ .../TheLastIterationInForEachUnitTest.java | 93 +++++++++++++++++++ core-java-modules/pom.xml | 1 + 4 files changed, 111 insertions(+) create mode 100644 core-java-modules/core-java-loops/README.md create mode 100644 core-java-modules/core-java-loops/pom.xml create mode 100644 core-java-modules/core-java-loops/src/test/java/com/baeldung/loops/TheLastIterationInForEachUnitTest.java 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