[can-collect-return-null] Can Stream.collect() Return Null Value? (#13573)
* [can-collect-return-null] Can Stream.collect() Return Null Value? * [can-collect-return-null] remove the .gitignore file
This commit is contained in:
parent
65c9b520ee
commit
911df283d4
2
core-java-modules/core-java-streams-collect/README.md
Normal file
2
core-java-modules/core-java-streams-collect/README.md
Normal file
@ -0,0 +1,2 @@
|
||||
## Relevant Articles:
|
||||
|
43
core-java-modules/core-java-streams-collect/pom.xml
Normal file
43
core-java-modules/core-java-streams-collect/pom.xml
Normal file
@ -0,0 +1,43 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project xmlns="http://maven.apache.org/POM/4.0.0"
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
|
||||
<modelVersion>4.0.0</modelVersion>
|
||||
<artifactId>core-java-streams-4</artifactId>
|
||||
<version>0.1.0-SNAPSHOT</version>
|
||||
<name>core-java-streams-collect</name>
|
||||
<packaging>jar</packaging>
|
||||
|
||||
<parent>
|
||||
<groupId>com.baeldung.core-java-modules</groupId>
|
||||
<artifactId>core-java-modules</artifactId>
|
||||
<version>0.0.1-SNAPSHOT</version>
|
||||
</parent>
|
||||
|
||||
<dependencies>
|
||||
<dependency>
|
||||
<groupId>log4j</groupId>
|
||||
<artifactId>log4j</artifactId>
|
||||
<version>${log4j.version}</version>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.junit</groupId>
|
||||
<artifactId>junit-bom</artifactId>
|
||||
<version>${junit-jupiter.version}</version>
|
||||
<type>pom</type>
|
||||
<scope>import</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.assertj</groupId>
|
||||
<artifactId>assertj-core</artifactId>
|
||||
<version>${assertj.version}</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
</dependencies>
|
||||
|
||||
|
||||
<properties>
|
||||
<assertj.version>3.23.1</assertj.version>
|
||||
</properties>
|
||||
|
||||
</project>
|
@ -0,0 +1,92 @@
|
||||
package com.baeldung.collect.nullable;
|
||||
|
||||
import static java.util.stream.Collectors.collectingAndThen;
|
||||
import static java.util.stream.Collectors.groupingBy;
|
||||
import static java.util.stream.Collectors.toList;
|
||||
import static java.util.stream.Collectors.toMap;
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertNotNull;
|
||||
import static org.junit.jupiter.api.Assertions.assertNull;
|
||||
import static org.junit.jupiter.api.Assertions.assertThrows;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.function.Function;
|
||||
import java.util.stream.Collector;
|
||||
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
public class CanCollectReturnNullUnitTest {
|
||||
private final List<String> LANGUAGES = Arrays.asList("Kotlin", null, null, "Java", "Python", "Rust");
|
||||
|
||||
@Test
|
||||
void givenAStreamWithNullElements_whenCollect_shouldReturnNotNull() {
|
||||
List<String> result = LANGUAGES.stream()
|
||||
.filter(Objects::isNull)
|
||||
.collect(toList());
|
||||
assertNotNull(result);
|
||||
assertEquals(Arrays.asList(null, null), result);
|
||||
}
|
||||
|
||||
@Test
|
||||
void givenAStreamWithNullElements_whenCollectEmptyStream_shouldReturnNotNull() {
|
||||
List<String> result = LANGUAGES.stream()
|
||||
.filter(s -> s != null && s.length() == 1)
|
||||
.collect(toList());
|
||||
assertNotNull(result);
|
||||
assertTrue(result.isEmpty());
|
||||
|
||||
Map<Character, String> result2 = LANGUAGES.stream()
|
||||
.filter(s -> s != null && s.length() == 1)
|
||||
.collect(toMap(s -> s.charAt(0), Function.identity()));
|
||||
assertNotNull(result2);
|
||||
assertTrue(result2.isEmpty());
|
||||
|
||||
Map<Character, List<String>> result3 = LANGUAGES.stream()
|
||||
.filter(s -> s != null && s.length() == 1)
|
||||
.collect(groupingBy(s -> s.charAt(0)));
|
||||
assertNotNull(result3);
|
||||
assertTrue(result3.isEmpty());
|
||||
}
|
||||
|
||||
@Test
|
||||
void givenAStream_whenCollectByEmptyToNullCollector_shouldReturnExpectedResults() {
|
||||
Collector<String, ArrayList<String>, ArrayList<String>> emptyListToNullCollector = Collector.of(ArrayList::new, ArrayList::add, (a, b) -> {
|
||||
a.addAll(b);
|
||||
return a;
|
||||
}, a -> a.isEmpty() ? null : a);
|
||||
|
||||
List<String> notNullResult = LANGUAGES.stream()
|
||||
.filter(Objects::isNull)
|
||||
.collect(emptyListToNullCollector);
|
||||
assertNotNull(notNullResult);
|
||||
assertEquals(Arrays.asList(null, null), notNullResult);
|
||||
|
||||
List<String> nullResult = LANGUAGES.stream()
|
||||
.filter(s -> s != null && s.length() == 1)
|
||||
.collect(emptyListToNullCollector);
|
||||
assertNull(nullResult);
|
||||
}
|
||||
|
||||
@Test
|
||||
void givenAStream_whenCollectByCollectingAndThen_shouldReturnExpectedResults() {
|
||||
List<String> notNullResult = LANGUAGES.stream()
|
||||
.filter(Objects::nonNull)
|
||||
.collect(collectingAndThen(toList(), Collections::unmodifiableList));
|
||||
assertNotNull(notNullResult);
|
||||
assertEquals(Arrays.asList("Kotlin", "Java", "Python", "Rust"), notNullResult);
|
||||
|
||||
//the result list becomes immutable
|
||||
assertThrows(UnsupportedOperationException.class, () -> notNullResult.add("Oops"));
|
||||
|
||||
List<String> nullResult = LANGUAGES.stream()
|
||||
.filter(s -> s != null && s.length() == 1)
|
||||
.collect(collectingAndThen(toList(), strings -> strings.isEmpty() ? null : strings));
|
||||
assertNull(nullResult);
|
||||
}
|
||||
}
|
@ -121,6 +121,7 @@
|
||||
<module>core-java-streams-2</module>
|
||||
<module>core-java-streams-3</module>
|
||||
<module>core-java-streams-maps</module>
|
||||
<module>core-java-streams-collect</module>
|
||||
<module>core-java-string-algorithms</module>
|
||||
<module>core-java-string-algorithms-2</module>
|
||||
<module>core-java-string-apis</module>
|
||||
|
Loading…
x
Reference in New Issue
Block a user