Streams 2 - Satttoshi/github-wiki-generator GitHub Wiki
In Java ist ein Stream eine Sequenz von Objekten, die nacheinander verarbeitet werden können. Streams können aus verschiedenen Quellen wie Collections, Arrays oder sogar Dateien generiert werden. Die Verarbeitung von Streams kann in eine Pipeline gelegt werden, die aus verschiedenen Operationen besteht, um die Daten zu manipulieren oder zu filtern.
Es gibt verschiedene Möglichkeiten, um Streams in Java zu erstellen. Eine Möglichkeit besteht darin, eine vorhandene Collection in einen Stream zu konvertieren. Hier ist ein Beispiel dafür:
List<String> namen = Arrays.asList("Max", "Mia", "Tom");
Stream<String> namenStream = namen.stream();Eine andere Möglichkeit besteht darin, einen Stream direkt aus einem Array zu erstellen:
int[] zahlen = {1, 2, 3, 4, 5};
IntStream zahlenStream = Arrays.stream(zahlen);Eine Pipeline-Operation in einem Stream führt eine Verarbeitung auf den Stream-Elementen aus. Die meisten Operationen liefern einen neuen Stream als Ergebnis zurück, so dass mehrere Operationen hintereinander ausgeführt werden können.
Zum Beispiel kann man mit der map()-Operation ein Mapping auf jedes Element des Streams anwenden:
Stream<Integer> stream = Arrays.asList("1", "2", "3")
    .stream()
    .map(Integer::parseInt);Hier wird jedes Element der Liste in einen Integer konvertiert. Die map()-Operation gibt einen neuen Stream mit den konvertierten Integer-Objekten zurück.
Eine andere nützliche Pipeline-Operation ist filter(). Diese Operation filtert Elemente aus dem Stream heraus, die den vom Benutzer angegebenen Kriterien nicht entsprechen.
List<Integer> zahlen = Arrays.asList(1, 2, 3, 4, 5);
Stream<Integer> zahlenStream = zahlen.stream()
    .filter(z -> z % 2 == 0);In diesem Beispiel wird der zahlenStream um nur gerade Zahlen zu enthalten gefiltert.
Es gibt noch viele andere Pipeline-Operationen wie distinct(), sorted(), limit(), skip(), etc. Diese Operationen können verschiedene Aufgaben auf dem Stream durchführen und machen Streams zu einem sehr leistungsfähigen Werkzeug in der Java-Programmierung.
Streamerzeugung
Die Art und Weise, wie ein Stream erzeugt wird, kann auch durch die Nutzung von Streamgeneratoren erfolgen. Zwei der wichtigsten Arten von Streamgeneratoren in Java sind iterate() und generate().
iterate() erlaubt die Erstellung eines Streams, der kontinuierlich durch die Wiederholung einer Operationen generiert wird:
Stream.iterate(0, n -> n + 2)
    .limit(10)
    .forEach(System.out::println);In diesem Beispiel wird die iterate()-Methode verwendet, um einen unendlichen Stream ganzer Zahlen zu erzeugen, in dem jedes Element um 2 erhöht wird. Die limit()-Methode schränkt diesen Stream ein und gibt die ersten 10 Elemente aus.
generate() erlaubt die Erstellung eines Streams, der zufällig generiert wird:
Stream.generate(Math::random)
    .limit(5)
    .forEach(System.out::println);In diesem Beispiel wird die generate()-Methode verwendet, um einen Stream von zufälligen Gleitkommazahlen zu erzeugen. Die limit()-Methode schränkt den Stream auf 5 Elemente ein.
Streams sind eine leistungsfähige Art und Weise, um mit Daten in Java zu arbeiten. Durch den Einsatz von Pipeline-Operationen kann man Daten in einem Stream effizient manipulieren und filtern. Die Verwendung von Stream-Generatoren ermöglicht es, schnell und einfach Streams zu erstellen, die auf eine Vielzahl von Anwendungen angewendet werden können.