Lazy Evaluation und Streams

Lazy Evalutian

Unter „lazy evaluation” (=faule/bequeme Auswertung) versteht man das aneinanderreihen von Befehlen, ohne sie jedoch sofort auszuwerten, sondern erst auszuführen, wenn deren Ergebnis benötigt wird. Dies hat den Vorteil, dass unnötiges Kopieren von Daten vermieden wird. Theoretisch erlaubt diese Methode den Umgang mit unendlichen Datenmengen, denn es entsteht ein sogenannter Datenstrom. (siehe Streams)

Streams

Ein Stream ist eine Datenstruktur, die es theoretisch ermöglicht, mit einem unendlichem Strom von Daten umzugehen. Die Elemente eines Streams werden üblicherweise mit einem Iterator abgerufen bzw. aufgezählt. Streams stellen üblicherweise die folgenden Methoden zur Verfügung:

  • map: wendet eine Funktion auf das gegebene Element an. (Der Typ des Streams kann sich dabei unter Umständen ändern)
  • filter: filtert alle Elemente heraus, die nicht die Bedingung erfüllen.
  • reduce: reduziert die Elemente auf ein Ergebnis.
  • usw.

IterableStream

Ein IterableStream nutzt einen abstrakten Datentyp, wie eine List, ein Array oder einen anderen Stream. Als Operationen stehen häufig die Methoden map oder filter zur Verfügung. Durch das Anwenden der Funktionen entsteht eine verkettete Struktur von Daten.

Es gibt sogar sinnvolle Anwendungsfälle für unendliche Streams, beispielsweise die Berechnung möglichst vieler Primzahlen, oder die Pakete in einem Netzwerk-Stream.

Die Funktion map: Sie führt eine beliebige Funktion für jedes Element aus. Der Rückgabewert wird wieder als Element für den neuen Stream verwendet. Die Laufzeit in der O-Notation liegt in O(1) .

Die Funktion filter: Sie filtert Elemente anhand eines gegebenen Prädikats und gibt nur die Elemente zurück, welche diesem entsprechen. Das heißt, die Menge der Elemente könnte sich hier reduzieren. Die Laufzeit liegt in O(1).

Die Funktion reduce: Im Gegensatz zu map und filter wird hier kein neuer Stream erzeugt, sondern die Elemente werden zu einem Ergebnis reduziert. Die Laufzeit liegt in O(n.accumulate(n) + next (n))

Zusammenfassung
Artikeltitel
Lazy Evaluation und Streams
Beschreibung
In diesem Beitrag beschäftigen wir uns mit lazy evaluation und streams.
Autor

Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

E-Mail-Benachrichtigung bei weiteren Kommentaren.
Auch möglich: Abo ohne Kommentar.

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden .

Pin It on Pinterest

Durch die weitere Nutzung der Seite stimmst du der Verwendung von Cookies zu. Weitere Informationen

Die Cookie-Einstellungen auf dieser Website sind auf "Cookies zulassen" eingestellt, um das beste Surferlebnis zu ermöglichen. Wenn du diese Website ohne Änderung der Cookie-Einstellungen verwendest oder auf "Akzeptieren" klickst, erklärst du sich damit einverstanden.

Schließen