Buscar..


Observaciones

Las transmisiones son compostables, enumerables perezosos.

Debido a su pereza, las secuencias son útiles cuando se trabaja con colecciones grandes (o incluso infinitas). Al encadenar muchas operaciones con Enum , se crean listas intermedias, mientras que Stream crea una receta de cálculos que se ejecutan en un momento posterior.

Encadenamiento de múltiples operaciones.

Stream es especialmente útil cuando desea ejecutar varias operaciones en una colección. Esto se debe a que Stream es perezoso y solo hace una iteración (mientras que Enum haría varias iteraciones, por ejemplo).

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]

Aquí, encadenamos 3 operaciones ( map , filter y take_every ), pero la iteración final solo se realizó después de Enum.to_list .

Lo que Stream hace internamente, es que espera hasta que se requiera una evaluación real. Antes de eso, crea una lista de todas las funciones, pero una vez que se necesita una evaluación, recorre la colección una vez, ejecutando todas las funciones en cada elemento. Esto lo hace más eficiente que Enum , que en este caso haría 3 iteraciones, por ejemplo.



Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow