Elixier - Streams
Viele Funktionen erwarten eine Aufzählung und geben a zurück listzurück. Dies bedeutet, dass bei der Ausführung mehrerer Operationen mit Enum für jede Operation eine Zwischenliste erstellt wird, bis das Ergebnis erreicht ist.
Streams unterstützen faule Operationen im Gegensatz zu eifrigen Operationen durch Aufzählungen. Zusamenfassend,streams are lazy, composable enumerables. Dies bedeutet, dass Streams keine Operation ausführen, es sei denn, dies ist unbedingt erforderlich. Betrachten wir ein Beispiel, um dies zu verstehen -
odd? = &(rem(&1, 2) != 0)
res = 1..100_000 |> Stream.map(&(&1 * 3)) |> Stream.filter(odd?) |> Enum.sum
IO.puts(res)
Wenn das obige Programm ausgeführt wird, wird das folgende Ergebnis erzeugt:
7500000000
In dem oben angegebenen Beispiel 1..100_000 |> Stream.map(&(&1 * 3))Gibt einen Datentyp zurück, einen tatsächlichen Stream, der die Kartenberechnung über den Bereich 1..100_000 darstellt. Diese Darstellung wurde noch nicht bewertet. Anstatt Zwischenlisten zu generieren, erstellen Streams eine Reihe von Berechnungen, die nur aufgerufen werden, wenn wir den zugrunde liegenden Stream an das Enum-Modul übergeben. Streams sind nützlich, wenn Sie mit großen, möglicherweise unendlichen Sammlungen arbeiten.
Streams und Enums haben viele Funktionen gemeinsam. Streams bieten hauptsächlich dieselben Funktionen wie das Enum-Modul, das Listen als Rückgabewerte generiert hat, nachdem Berechnungen für Eingabe-Enumerables durchgeführt wurden. Einige von ihnen sind in der folgenden Tabelle aufgeführt -
Sr.Nr. | Funktion und ihre Beschreibung |
---|---|
1 |
chunk(enum, n, step, leftover \\ nil) Streamen Sie die Aufzählung in Blöcken mit jeweils n Elementen, wobei jeder neue Block Schrittelemente in die Aufzählung startet. |
2 |
concat(enumerables) Erstellt einen Stream, der jede Aufzählung in einer Aufzählung auflistet. |
3 |
each(enum, fun) Führt die angegebene Funktion für jedes Element aus. |
4 |
filter(enum, fun) Erstellt einen Stream, der Elemente gemäß der angegebenen Funktion bei der Aufzählung filtert. |
5 |
map(enum, fun) Erstellt einen Stream, der die angegebene Funktion bei der Aufzählung anwendet. |
6 |
drop(enum, n) Lässt die nächsten n Gegenstände faul aus der Aufzählung fallen. |