93 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
		
		
			
		
	
	
			93 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| 
								 | 
							
								---
							 | 
						||
| 
								 | 
							
								title: Streams
							 | 
						||
| 
								 | 
							
								---
							 | 
						||
| 
								 | 
							
								# Streams
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								In Java 8 Streams got added as a new feature the Java toolbox. Streams allow you to quickly and cleanly process Collections.  
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Please read the chapter about lambdas and functional programming before continuing.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## How it works
							 | 
						||
| 
								 | 
							
								The Stream loops the elements of the collection for you.
							 | 
						||
| 
								 | 
							
								Each intermediate and the terminal operation are called for each object.
							 | 
						||
| 
								 | 
							
								Once all operations are finished for the first objects, then the second object is loaded.
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## Important Methods
							 | 
						||
| 
								 | 
							
								### Creation
							 | 
						||
| 
								 | 
							
								- `Collection.stream()`: create a Stream from any object from any class implementing `Collection`
							 | 
						||
| 
								 | 
							
								- `Arrays.stream(array)`: create a Stream from an Array
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								### Intermediate Operations
							 | 
						||
| 
								 | 
							
								These operations convert the Stream Objects somehow.
							 | 
						||
| 
								 | 
							
								- `Stream.map(Function<In,Out> function)`: apply a Function to convert In to Out
							 | 
						||
| 
								 | 
							
								- `Stream.filter(Predicate<In> predicate)`: remove Objects from Stream for which the Predicate does not test true
							 | 
						||
| 
								 | 
							
								- `Stream.distinct()`: remove Objects from Stream which are duplicates
							 | 
						||
| 
								 | 
							
								- `Stream.sorted()`: sort the Objects in the Stream
							 | 
						||
| 
								 | 
							
								- `Stream.limit(int n)`: end Stream after n Objects
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								### Terminal Operations
							 | 
						||
| 
								 | 
							
								These operations receive the Stream Objects and end the Stream.
							 | 
						||
| 
								 | 
							
								- `Stream.collect(Collector<In,?,Out> collector)`: collect all Objects in Stream into Object
							 | 
						||
| 
								 | 
							
								- `Stream.forEach(Consumer<In> consumer)`: consume all Objects in Stream using the consumer function
							 | 
						||
| 
								 | 
							
								- `Stream.count()`: count all Objects in Stream
							 | 
						||
| 
								 | 
							
								- `Stream.findFirst()`: return the first Object of the Stream and stop
							 | 
						||
| 
								 | 
							
								- `Stream.anyMatch(Predicate<In> predicate)`: return true if any Object in the Stream tests true for the Predicate
							 | 
						||
| 
								 | 
							
								- `Stream.allMatch(Predicate<In> predicate)`: return true if all Object in the Stream test true for the Predicate
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								## Examples
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```java
							 | 
						||
| 
								 | 
							
								// print the length of all Strings in a List
							 | 
						||
| 
								 | 
							
								for (String string : Arrays.asList("abc", "de", "f", "abc")) {
							 | 
						||
| 
								 | 
							
								    int length = string.length();
							 | 
						||
| 
								 | 
							
								    System.out.println(length);
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Arrays.asList("abc", "de", "f", "abc")
							 | 
						||
| 
								 | 
							
								        .stream()
							 | 
						||
| 
								 | 
							
								        .map(String::length)
							 | 
						||
| 
								 | 
							
								        .forEach(System.out::println);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// output: 3 2 1 3
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```java
							 | 
						||
| 
								 | 
							
								// print all Strings in a List with a Length greater than 2
							 | 
						||
| 
								 | 
							
								for (String string : Arrays.asList("abc", "de", "f", "abc")) {
							 | 
						||
| 
								 | 
							
								    if (string.length() > 2) {
							 | 
						||
| 
								 | 
							
								        System.out.println(string);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								Arrays.asList("abc", "de", "f", "abc")
							 | 
						||
| 
								 | 
							
								        .stream()
							 | 
						||
| 
								 | 
							
								        .filter(string -> string.length() > 2)
							 | 
						||
| 
								 | 
							
								        .forEach(System.out::println);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// output: abc abc
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								```java
							 | 
						||
| 
								 | 
							
								// create a sorted List with all unique Strings from another List which are longer than or requal 2
							 | 
						||
| 
								 | 
							
								List<String> result = new ArrayList<>();
							 | 
						||
| 
								 | 
							
								for (String string : Arrays.asList("de", "abc", "f", "abc")) {
							 | 
						||
| 
								 | 
							
								    if (string.length() >= 2
							 | 
						||
| 
								 | 
							
								            && ! result.contains(string)) {
							 | 
						||
| 
								 | 
							
								        result.add(string);
							 | 
						||
| 
								 | 
							
								    }
							 | 
						||
| 
								 | 
							
								}
							 | 
						||
| 
								 | 
							
								Collections.sort(result);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								List<String> result2 = Arrays.asList("de", "abc", "f", "abc")
							 | 
						||
| 
								 | 
							
								        .stream()
							 | 
						||
| 
								 | 
							
								        .filter(string -> string.length() >= 2)
							 | 
						||
| 
								 | 
							
								        .distinct()
							 | 
						||
| 
								 | 
							
								        .sorted()
							 | 
						||
| 
								 | 
							
								        .collect(Collectors.toList());
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								// result: abc de
							 | 
						||
| 
								 | 
							
								```
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								### Sources
							 | 
						||
| 
								 | 
							
								1. [Processing Data with Java SE 8 Streams, Part 1](http://www.oracle.com/technetwork/articles/java/ma14-java-se-8-streams-2177646.html)
							 |