サーチ…


備考

ストリームは構成可能で、遅延した列挙型です。

その怠惰のために、ストリームは大きな(または無限の)コレクションで作業するときに便利です。 Enumで多くの演算を連鎖させる場合、中間リストが作成され、 Streamは後で実行される計算のレシピを作成します。

複数の操作の連鎖

Streamは、コレクションに対して複数の操作を実行する場合に特に便利です。これは、 Streamが怠惰で、繰り返しが1回だけである( Enumは複数の繰り返しを行うなど)ためです。

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]

ここでは、3つの操作( mapfiltertake_every )をチェーン化しましたが、最後の繰り返しはEnum.to_listが呼び出された後にのみ行われEnum.to_listた。

Streamが内部で行うことは、実際の評価が必要になるまで待機することです。その前に、すべての関数のリストが作成されますが、評価が必要な場合は、すべての項目のすべての関数を実行してコレクションを一度実行します。これにより、 Enumよりも効率的になります。この場合、この場合は3回の反復が行われます。



Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow