Elixir Language
Ström
Sök…
Anmärkningar
Strömmar är komponerbara, lata antalet.
På grund av deras lathet är strömmar användbara när man arbetar med stora (eller till och med oändliga) samlingar. När man kedjer många operationer med Enum skapas mellanlistor, medan Stream skapar ett recept för beräkningar som utförs vid ett senare tillfälle.
Kedja flera operationer
Stream är särskilt användbart när du vill köra flera operationer på en samling. Detta beror på att Stream är lat och bara en iteration (medan Enum gör flera iterationer).
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]
Här kedjade vi 3 operationer ( map , filter och take_every ), men den slutliga iterationen gjordes först efter att Enum.to_list kallades.
Vad Stream gör internt är att det väntar tills den faktiska utvärderingen krävs. Innan det skapas en lista över alla funktioner, men när utvärdering behövs går den igenom samlingen en gång och kör alla funktioner på varje objekt. Detta gör det mer effektivt än Enum , som i detta fall till exempel skulle göra tre iterationer.