Zoeken…


Opmerkingen

Streams zijn configureerbare, luie opsommingen.

Vanwege hun luiheid zijn streams handig bij het werken met grote (of zelfs oneindige) collecties. Bij het koppelen van veel bewerkingen met Enum , worden tussentijdse lijsten gemaakt, terwijl Stream een recept maakt van berekeningen die op een later moment worden uitgevoerd.

Meerdere bewerkingen koppelen

Stream is vooral handig wanneer u meerdere bewerkingen op een verzameling wilt uitvoeren. Dit komt omdat Stream lui is en slechts één iteratie uitvoert (terwijl Enum bijvoorbeeld meerdere iteraties zou doen).

numbers = 1..100
|> Stream.map(fn(x) -> x * 2 end)
|> Stream.filter(fn(x) -> rem(x, 2) == 0 end)
|> Stream.take_every(3)
|> Enum.to_list

[2, 8, 14, 20, 26, 32, 38, 44, 50, 56, 62, 68, 74, 80, 86, 92, 98, 104, 110,
 116, 122, 128, 134, 140, 146, 152, 158, 164, 170, 176, 182, 188, 194, 200]

Hier hebben we 3 bewerkingen aan elkaar gekoppeld ( map , filter en take_every ), maar de laatste iteratie werd pas uitgevoerd nadat Enum.to_list werd aangeroepen.

Wat Stream intern doet, is dat het wacht totdat daadwerkelijke evaluatie is vereist. Daarvoor maakt het een lijst van alle functies, maar zodra evaluatie nodig is, doorloopt het één keer de verzameling en worden alle functies op elk item uitgevoerd. Dit maakt het efficiënter dan Enum , die in dit geval bijvoorbeeld 3 iteraties zou doen.



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow