© DrHitch/Shutterstock.com
Shortcuts
Java 9 Streams

2 Streams: Data in, Data out

Beginnen wir jetzt damit, uns die Schnittstelle zwischen Streams und der klassischen Java-Welt anzusehen.

Shortcut Autorenteam


2.1 Wo kommen die Quelldaten her?Wenn man daran denkt, dass Streams nicht wie Collections ihre eigenen Daten halten, dann stellt sich die Frage, wo sie denn herkommen. Die gebräuchlichste Art, Streams zu erzeugen, ist die Verwendung von Methoden, die aus einer festen Anzahl von Elementen einen Stream erzeugen. Das sind die Methoden Stream.of(val1,val2,val3…) und Stream.of(array). Es gibt auch spezialisierte Streams für primitive Datentypen, die über spezifische Erzeugungsmethoden, zum Beispiel IntStream.range(int, int), verfügen. Zu den Methoden aus dem Bereich der Erzeugung aus einem festen Wertevorrat gehört auch die Methode, die aus einem String einen Stream erzeugt. Ein String ist nichts anderes als eine endliche Kette von chars. Sie kann als Wertevorrat übergeben werden:final Stream splitOf = Stream.of("A,B,C".split(","));Einige Klassen, die als Datenlieferanten dienen, haben Methoden, die einen Stream zurückliefern, zum Beispiel die Klasse Random mit der Methode Random.ints() oder BufferedReader.lines(). Genauso können Streams aus Streams erzeugt werden, was im Folgenden genauer dargestellt werden wird.Nun fehlen noch zwei Möglichkeiten, Streams zu erzeugen. Mit einem Builder kann ein Stream programmatisch erzeugt werden:final Stream stream = Stream.builder().add(new Pair()).build();Stream.generate(() -> { final Pair p = new Pair(); p.id = random.nextInt(100); p.value = "Value + " + p.id; return p;})2.2 Wo gehen die Daten hin?Nachdem wir jetzt wissen, woher die Daten kommen, stellt sich die Frage, wie die Daten aus dem Stream wiederzubekommen sind. Immerhin ist ja meist (nicht immer) angedacht, damit weiterzuarbeiten. Die einfachste Möglichkeit besteht darin, aus einem Stream mit der Methode stream.toArray() ein Array oder mittels stream.collect(Collectors.toList()) eine Liste zu erzeugen. Damit sind fast 90 Prozent der Einsatzgebiete beschrieben, aber es können auch Sets und Maps erzeugt werden.Um als Ergebnis ein Set zu erhalten, kann mittels der Methode stream.collect(Collectors.toSet() ein HashSet angefordert werden. Ob es auch in den kommenden Versionen ein HashSet sein wird, ist nicht sicher. Maps hingegen werden mit stream.collect(Collectors.groupingBy(..)) erzeugt. Das Argument von groupingBy() sieht mindestens eine Funktion vor, mit der eine Gruppierung vorgenommen werden kann. Die Gruppierung stellt den Schlüssel in der Map dar, das Value ist dann eine Liste vom Typ der Elemente des Streams.Eine für so manchen Ent...

Shortcuts
Java 9 Streams

2 Streams: Data in, Data out

Beginnen wir jetzt damit, uns die Schnittstelle zwischen Streams und der klassischen Java-Welt anzusehen.

Shortcut Autorenteam


2.1 Wo kommen die Quelldaten her?Wenn man daran denkt, dass Streams nicht wie Collections ihre eigenen Daten halten, dann stellt sich die Frage, wo sie denn herkommen. Die gebräuchlichste Art, Streams zu erzeugen, ist die Verwendung von Methoden, die aus einer festen Anzahl von Elementen einen Stream erzeugen. Das sind die Methoden Stream.of(val1,val2,val3…) und Stream.of(array). Es gibt auch spezialisierte Streams für primitive Datentypen, die über spezifische Erzeugungsmethoden, zum Beispiel IntStream.range(int, int), verfügen. Zu den Methoden aus dem Bereich der Erzeugung aus einem festen Wertevorrat gehört auch die Methode, die aus einem String einen Stream erzeugt. Ein String ist nichts anderes als eine endliche Kette von chars. Sie kann als Wertevorrat übergeben werden:final Stream splitOf = Stream.of("A,B,C".split(","));Einige Klassen, die als Datenlieferanten dienen, haben Methoden, die einen Stream zurückliefern, zum Beispiel die Klasse Random mit der Methode Random.ints() oder BufferedReader.lines(). Genauso können Streams aus Streams erzeugt werden, was im Folgenden genauer dargestellt werden wird.Nun fehlen noch zwei Möglichkeiten, Streams zu erzeugen. Mit einem Builder kann ein Stream programmatisch erzeugt werden:final Stream stream = Stream.builder().add(new Pair()).build();Stream.generate(() -> { final Pair p = new Pair(); p.id = random.nextInt(100); p.value = "Value + " + p.id; return p;})2.2 Wo gehen die Daten hin?Nachdem wir jetzt wissen, woher die Daten kommen, stellt sich die Frage, wie die Daten aus dem Stream wiederzubekommen sind. Immerhin ist ja meist (nicht immer) angedacht, damit weiterzuarbeiten. Die einfachste Möglichkeit besteht darin, aus einem Stream mit der Methode stream.toArray() ein Array oder mittels stream.collect(Collectors.toList()) eine Liste zu erzeugen. Damit sind fast 90 Prozent der Einsatzgebiete beschrieben, aber es können auch Sets und Maps erzeugt werden.Um als Ergebnis ein Set zu erhalten, kann mittels der Methode stream.collect(Collectors.toSet() ein HashSet angefordert werden. Ob es auch in den kommenden Versionen ein HashSet sein wird, ist nicht sicher. Maps hingegen werden mit stream.collect(Collectors.groupingBy(..)) erzeugt. Das Argument von groupingBy() sieht mindestens eine Funktion vor, mit der eine Gruppierung vorgenommen werden kann. Die Gruppierung stellt den Schlüssel in der Map dar, das Value ist dann eine Liste vom Typ der Elemente des Streams.Eine für so manchen Ent...

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