[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-2</module> | ||||||
|         <module>core-java-streams-3</module> |         <module>core-java-streams-3</module> | ||||||
|         <module>core-java-streams-maps</module> |         <module>core-java-streams-maps</module> | ||||||
|  |         <module>core-java-streams-collect</module> | ||||||
|         <module>core-java-string-algorithms</module> |         <module>core-java-string-algorithms</module> | ||||||
|         <module>core-java-string-algorithms-2</module> |         <module>core-java-string-algorithms-2</module> | ||||||
|         <module>core-java-string-apis</module> |         <module>core-java-string-apis</module> | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user