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.



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow