Stream

Unlike Enum, which eagerly evaluates a collection, Stream defers execution until it's absolutely needed — ideal for working with large datasets as it is more efficient and memory-friendly.

lazy enumerables

Stream.iterate(1, fn x -> x + 1 end)
|> Stream.filter(fn x -> rem(x, 2) == 0 end)
|> Enum.take(4)
[2, 4, 6, 8]

jsonl processing

{"id": 1, "name": "Alice", "role": "developer"}
{"id": 2, "name": "Bob", "role": "designer"}
{"id": 3, "name": "Charlie", "role": "manager"}
{"id": 4, "name": "Diana", "role": "developer"}
{"id": 5, "name": "Eve", "role": "intern"}
...
File.stream!("data.jsonl")
|> Stream.map(&JSON.decode/1)
|> Stream.map(fn {:ok, record} -> record end)
|> Enum.take(1)
[%{"id" => 1, "name" => "Alice", "role" => "developer"}]