© Excellent backgrounds/Shutterstock.com
Stream-Erzeugung und Stream-Operationen

I have a Stream ...


Im vorangegangenen Beitrag im Java Magazin 6.2014 haben wir erläutert, was Streams in Java 8 prinzipiell sind. Es geht dabei um neue Schnittstellen im Package java.util, mit denen sequenzielle und parallele Operationen auf allen Elementen einer Sequenz (z. B. Liste, Set, Array) unterstützt werden. Nach der Einführung im letzten Beitrag wollen wir nun dieses Mal einen Überblick über das Stream API geben. Woher bekommt man einen Stream? Welche Operationen unterstützt er? Worauf muss ich achten, wenn ich die Operationen verwenden will? Wie orientiere ich mich in der Javadoc des Stream API?

Kurze Wiederholung: Streams sind Abstraktionen, die die sequenzielle oder parallele Ausführung von Operationen auf Elementen einer Sequenz unterstützen. Dabei geht es um so genannte Bulk Operations, also Massenoperationen, die auf alle (oder zumindest viele) Elemente der Sequenz angewandt werden sollen. Die Sequenz, um deren Elemente es geht, kann eine Collection (z. B. Liste oder Set), ein Array oder eine andere Art von Sequenz sein. Wir werden nachfolgend noch eine Reihe von Beispielen für solche Sequenzen sehen.

Anders als Collections oder Arrays sind Streams keine Datenspeicher, die die Elemente der Sequenz in ihren internen Datenstrukturen ablegen. Ein Stream hält lediglich einen Verweis auf einen Datenspeicher (die so genannte underlying stream source) zusammen mit einer Liste von Operationen, die auf die Sequenzelemente anzuwenden sind. Streams können auch so aussehen, dass sie anstelle eines Datenspeichers einen Generator benutzen, der die Sequenzelemente generiert. In diesem Fall können die Streams sogar von unbeschränkter Länge sein (so genannte infinite streams). Ehe wir uns das Stream API mit seinen zahlreichen Methoden näher ansehen, wollen wir zeigen, wie man Streams erzeugen kann.

Das Erzeugen von Streams

Collection-basierte Streams: Man kann Streams aus Col­lections erzeugen. Dafür haben die Collections die Methoden stream und parallelStream. Hier ist ein Beispiel:

List<String> stringList = ... ; Stream<String> sequentialStringStream = stringList.stream(); Stream<String> parallelStringStream = stringList.parallelStream();

Array-basierte Streams: Streams können aber auch aus Arrays erzeugt werden. Dafür hat die Klasse Arrays eine stream-Methode, die einen sequenziellen Stream erzeugt. Um aus einem sequenziellen Stream einen parallelen Stream zu machen, gibt es im Stream-Interface die Methode parallel. Hier ist ein Beispiel:

String[] array = ... ; Stream<St...

Neugierig geworden?

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