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)
 |