diff --git a/core-java-modules/core-java-streams-6/REAME.md b/core-java-modules/core-java-streams-6/REAME.md new file mode 100644 index 0000000000..8b13789179 --- /dev/null +++ b/core-java-modules/core-java-streams-6/REAME.md @@ -0,0 +1 @@ + diff --git a/core-java-modules/core-java-streams-6/pom.xml b/core-java-modules/core-java-streams-6/pom.xml new file mode 100644 index 0000000000..c8cff002e4 --- /dev/null +++ b/core-java-modules/core-java-streams-6/pom.xml @@ -0,0 +1,87 @@ + + + 4.0.0 + core-java-streams-6 + core-java-streams-6 + jar + + + com.baeldung.core-java-modules + core-java-modules + 0.0.1-SNAPSHOT + + + + + log4j + log4j + ${log4j.version} + + + org.junit + junit-bom + ${junit-jupiter.version} + pom + import + + + org.assertj + assertj-core + ${assertj-core.version} + test + + + org.apache.commons + commons-lang3 + ${commons-lang3.version} + test + + + io.vavr + vavr + ${vavr.version} + + + com.google.guava + guava + ${guava.version} + + + org.apache.commons + commons-collections4 + ${commons-collections4.version} + + + + + core-java-streams-6 + + + ../core-java-streams-6/src/main + true + + + + + org.apache.maven.plugins + maven-compiler-plugin + + ${maven.compiler.source} + ${maven.compiler.target} + -parameters + + + + + + + 12 + 12 + 0.10.2 + 3.23.1 + 3.12.0 + + + diff --git a/core-java-modules/core-java-streams-6/src/main/java/com/baeldung/streams/emptylists/StreamFromEmptyList.java b/core-java-modules/core-java-streams-6/src/main/java/com/baeldung/streams/emptylists/StreamFromEmptyList.java new file mode 100644 index 0000000000..f45c1668b7 --- /dev/null +++ b/core-java-modules/core-java-streams-6/src/main/java/com/baeldung/streams/emptylists/StreamFromEmptyList.java @@ -0,0 +1,56 @@ +package com.baeldung.streams.emptylists; + +import java.util.ArrayList; +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +public class StreamFromEmptyList { + + public static void main(String[] args) { + createStreamFromEmptyList(); + + List nameList = getList(); + printNameLengths(nameList); // passing null + printNameLengths((nameList == null) ? List.of() : nameList); // passing empty list + + collectStreamOfEmptyListToAnotherList(); + } + + private static void collectStreamOfEmptyListToAnotherList() { + List emptyList = new ArrayList<>(); + List collectedList = emptyList.stream().collect(Collectors.toList()); + + System.out.println(collectedList.size() == 0); + + collectedList = emptyList.stream().filter(s -> s.startsWith("a")).collect(Collectors.toList()); + System.out.println(collectedList.size() == 0); + } + + private static void createStreamFromEmptyList() { + List emptyList = new ArrayList<>(); + Stream emptyStream = emptyList.stream(); + System.out.println(emptyStream.findAny().isEmpty()); + } + + private static void printNameLengths(List nameList) { + // Without Stream - Traditional approach with null check + if (nameList != null) { + for (String name : nameList) { + System.out.println("Length of " + name + ": " + name.length()); + } + } else { + System.out.println("List is null. Unable to process."); + } + + // With Stream - More concise approach + Optional.ofNullable(nameList).ifPresent(list -> list.stream() + .map(name -> "Length of " + name + ": " + name.length()).forEach(System.out::println)); + } + + private static List getList() { + // This method may return null for demonstration purposes + return null; + } +} diff --git a/core-java-modules/core-java-streams-6/src/test/java/com/baeldung/streams/emptylists/StreamFromEmptyListUnitTest.java b/core-java-modules/core-java-streams-6/src/test/java/com/baeldung/streams/emptylists/StreamFromEmptyListUnitTest.java new file mode 100644 index 0000000000..8b0c63b77a --- /dev/null +++ b/core-java-modules/core-java-streams-6/src/test/java/com/baeldung/streams/emptylists/StreamFromEmptyListUnitTest.java @@ -0,0 +1,27 @@ +package com.baeldung.streams.emptylists; + +import static org.junit.Assert.assertTrue; + +import java.util.ArrayList; +import java.util.List; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +import org.junit.Test; + +public class StreamFromEmptyListUnitTest { + + @Test + public void givenEmptyList_whenConvertedToStream_thenResultantStreamIsEmpty() { + List emptyList = new ArrayList<>(); + Stream emptyStream = emptyList.stream(); + assertTrue(emptyStream.findAny().isEmpty()); + } + + @Test + public void givenEmptyList_whenCollectStreamOfEmptyListToAnotherList_thenResultantListIsEmpty() { + List emptyList = new ArrayList<>(); + List collectedList = emptyList.stream().collect(Collectors.toList()); + assertTrue(collectedList.isEmpty()); + } +} diff --git a/core-java-modules/pom.xml b/core-java-modules/pom.xml index 50a7fed934..f4722855bc 100644 --- a/core-java-modules/pom.xml +++ b/core-java-modules/pom.xml @@ -63,6 +63,7 @@ core-java-perf-2 core-java-streams-4 core-java-streams-5 + core-java-streams-6 core-java-streams-collect core-java-streams-maps core-java-string-operations-3