© DrHitch/Shutterstock.com
Shortcuts
Java 9 Streams

3 Streams - Core Methods

Nachdem wir uns im vorigen Kapitel damit beschäftigt haben, wie die Daten in die Streams gelangen und wie sie wieder zu entnehmen sind, werden wir uns jetzt mit der Datentransformation beschäftigen. Es stehen unter anderem drei Basismethoden - forEach, match und find - zur Verfügung, mit denen man schnell und einfach die ersten Versuche unternehmen kann.

Shortcut Autorenteam


3.1 forEach – ein Lambda für jedes ElementDie Methode forEach() macht eigentlich genau das, was man vermutet: Sie wendet das als Argument übergebene Lambda auf jedes einzelne Element des Streams an. Diese Methode ist auch bei Iterable, List, Map und einigen anderen Klassen/Interfaces zu finden, was erfreulicherweise zu kürzeren sprachlichen Konstrukten führt. Listing 3.1 zeigt zuerst die Iteration in Pre JDK 8 Notation und danach unter Verwendung von forEach(). In ihm sind lange und kurze Versionen zu sehen. Die langen Versionen verwenden die volle Notation inklusive der geschwungenen Klammern. Jeweils zuletzt wird eine Version mit der Verwendung von Method References angegeben, zu erkennen an den Doppelpunkten.final List list = List.of(1 , 2 , 3 , 4);for (Integer integer : list) { System.out.println("integer = " + integer);}list.stream().forEach((Integer integer) -> {System.out.println(integer);});list.stream().forEach(integer -> {System.out.println(integer);});list.stream().forEach(integer -> System.out.println(integer));list.stream().forEach(System.out::println);list.parallelStream().forEach((Integer integer) -> {System.out.println(integer);});list.parallelStream().forEach(integer -> {System.out.println(integer);});list.parallelStream().forEach(integer -> System.out.println(integer));list.parallelStream().forEach(System.out::println);list.forEach((Integer integer) -> {System.out.println(integer);});list.forEach(integer -> {System.out.println(integer);});list.forEach(integer -> System.out.println(integer));list.forEach(System.out::println);In Listing 3.1 besteht ein kleiner, aber feiner Unterschied zwischen den beiden Versionen. Die Variante, die den Stream mit der Methode parallelStream() erzeugt, lässt die Elemente parallel verarbeiten. Wir haben an der Stelle einen parallelen Stream.Bei beiden ist sichergestellt, dass die übergebene Methodenreferenz nur einmal auf jedes Element angewandt wird. Nicht sichergestellt ist jedoch die Reihenfolge, in der die einzelnen Elemente abgearbeitet werden, wenn es sich um parallele Streams handelt. Ist die Reihenfolge von Bedeutung, muss die Methode forEachOrdered() verwendet werden. Hier wird bei der Abarbeitung die Reihenfolge, die in der Verarbeitungsstufe vor dem forEach(..) vorliegt, eingehalten. Diese Methode sollte nur verwendet werden, wenn es zwingend notwendig ist. Was hier allerdings auf den ersten Blick nicht ersichtlich ist: Es wird ein NotNullCheck durchgeführt, der...

Shortcuts
Java 9 Streams

3 Streams - Core Methods

Nachdem wir uns im vorigen Kapitel damit beschäftigt haben, wie die Daten in die Streams gelangen und wie sie wieder zu entnehmen sind, werden wir uns jetzt mit der Datentransformation beschäftigen. Es stehen unter anderem drei Basismethoden - forEach, match und find - zur Verfügung, mit denen man schnell und einfach die ersten Versuche unternehmen kann.

Shortcut Autorenteam


3.1 forEach – ein Lambda für jedes ElementDie Methode forEach() macht eigentlich genau das, was man vermutet: Sie wendet das als Argument übergebene Lambda auf jedes einzelne Element des Streams an. Diese Methode ist auch bei Iterable, List, Map und einigen anderen Klassen/Interfaces zu finden, was erfreulicherweise zu kürzeren sprachlichen Konstrukten führt. Listing 3.1 zeigt zuerst die Iteration in Pre JDK 8 Notation und danach unter Verwendung von forEach(). In ihm sind lange und kurze Versionen zu sehen. Die langen Versionen verwenden die volle Notation inklusive der geschwungenen Klammern. Jeweils zuletzt wird eine Version mit der Verwendung von Method References angegeben, zu erkennen an den Doppelpunkten.final List list = List.of(1 , 2 , 3 , 4);for (Integer integer : list) { System.out.println("integer = " + integer);}list.stream().forEach((Integer integer) -> {System.out.println(integer);});list.stream().forEach(integer -> {System.out.println(integer);});list.stream().forEach(integer -> System.out.println(integer));list.stream().forEach(System.out::println);list.parallelStream().forEach((Integer integer) -> {System.out.println(integer);});list.parallelStream().forEach(integer -> {System.out.println(integer);});list.parallelStream().forEach(integer -> System.out.println(integer));list.parallelStream().forEach(System.out::println);list.forEach((Integer integer) -> {System.out.println(integer);});list.forEach(integer -> {System.out.println(integer);});list.forEach(integer -> System.out.println(integer));list.forEach(System.out::println);In Listing 3.1 besteht ein kleiner, aber feiner Unterschied zwischen den beiden Versionen. Die Variante, die den Stream mit der Methode parallelStream() erzeugt, lässt die Elemente parallel verarbeiten. Wir haben an der Stelle einen parallelen Stream.Bei beiden ist sichergestellt, dass die übergebene Methodenreferenz nur einmal auf jedes Element angewandt wird. Nicht sichergestellt ist jedoch die Reihenfolge, in der die einzelnen Elemente abgearbeitet werden, wenn es sich um parallele Streams handelt. Ist die Reihenfolge von Bedeutung, muss die Methode forEachOrdered() verwendet werden. Hier wird bei der Abarbeitung die Reihenfolge, die in der Verarbeitungsstufe vor dem forEach(..) vorliegt, eingehalten. Diese Methode sollte nur verwendet werden, wenn es zwingend notwendig ist. Was hier allerdings auf den ersten Blick nicht ersichtlich ist: Es wird ein NotNullCheck durchgeführt, der...

Neugierig geworden?


    
Loading...

Angebote für Teams

Für Firmen haben wir individuelle Teamlizenzen. Wir erstellen Ihnen gerne ein passendes Angebot.

Das Library-Modell:
IP-Zugang

Das Company-Modell:
Domain-Zugang