Was sind Streams Java?

2 Antworten

Streams können dir ein einheitliches Interface bieten für alles wo du irgendwie Daten hast die du nacheinander prozessieren kannst.

Möglichkeiten die so etwas bietet:

  • Zwischenoperationen hinzufügen, z.B. Daten filtern, zu anderen Daten mappen. Oder auch einen generischen Weg die Daten auszulesen und zu einer klassischen Datentstruktur wie einem Array umzuwandeln.
  • Dabei kannst du einfach Funktionen angeben, also ein funktionaler Programmierstil, das macht es einfach sehr generischen Code zu schreiben (wenn best practices einhält wie z.B. "side effects" zu vermeiden, das kann aber generell schnell schief gehen bei Datenverarbeitung).
  • Streams erlauben es teilweise Daten in paralell, also gleichzeitig, zu verarbeiten. Kommt aber auch auf den Stream an, Streams sind nicht grundsätzlich parallel aber solche Abstraktionen können oft nützlich sein, wenn man parallel processing implementieren möchte.

An sich geht es, wie oben schon beschrieben, einfach nur darum, einen einheitlichen Weg zu schaffen eine Reihe an Daten zu verarbeiten. Ob die Daten jetzt aus einer Datei gelesen werden, übers Netzwerk übermittelt oder dynamisch generiert werden ist egal. Du bekommst einfach eine Reihe an Daten, dir kann erst mal egal sein woher sie kommen, und kannst dann damit tun was du willst. Zwischenoperationen hinzufügen und dadurch einen neuen Stream erschaffen den du dann weiter geben kannst, über die Daten loopen, die Daten zu einer anderen Datentruktur wie einem Array prozessesieren, und dadurch auslesen.

Mittlerweile bieten eigentlich alle modernen Sprachen zumindest so etwas ähnliches. Es macht dich einfach viel flexibler. Stell dir vor du musst Daten aus einem File verarbeiten und du nimmst dafür eine Datei entgegen. Jetzt bekommst du aber plötzlich Daten aus einem Netzwerk und dein Code funktioniert direkt nicht mehr. Bei einem Stream wäre dir erst mal egal woher die Daten kommen.

Du solltest dich definitiv mit dem Thema beschäftigen, gerade weil es zu einem wichtigen Konzept in allen Sprachen geworden ist. Natürlich gibt es auch mal Fälle wo ein Stream Nachteile haben kann, so ein funktioneller Ansatz kann manchmal lesbarkeit erschweren, Performance kann natürlich ein Faktor sein. Aber generell eine gute Sache!

Von Experte Sören Stabenow bestätigt

Eine Abstraktion für Ein- und Ausgabe (siehe java.io), oder eine Abstraktion für sequentielle Operationen auf Daten im RAM (siehe java.util.stream).