Elixir Language
Corriente
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.