수색…


비고

스트림은 구성 가능하고 게으른 열거 형입니다.

그들의 게으름 때문에 스트림은 대규모 (또는 심지어 무한) 컬렉션으로 작업 할 때 유용합니다. Enum 사용하여 여러 작업을 연결하면 중간 목록이 만들어 Enum Stream 은 나중에 실행되는 계산 방법을 만듭니다.

여러 작업 체인화

Stream 은 컬렉션에서 여러 작업을 실행하려는 경우 특히 유용합니다. 이것은 Stream 이 게으르며 한 번의 반복 만 수행하기 때문입니다 (예를 들어, 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 개의 작업 ( map , filter , take_every )을 take_every 지만 Enum.to_list 가 호출 된 후에 만 ​​최종 반복이 수행되었습니다.

내부적으로 Stream 은 실제 평가가 필요할 때까지 기다리는 것입니다. 그 전에는 모든 기능의 목록을 작성하지만 일단 평가가 필요하면 모든 항목의 모든 기능을 실행하여 컬렉션을 한 번 수행합니다. 이렇게하면 Enum 보다 더 효율적입니다.이 경우에는 예를 들어 반복을 3 회 수행합니다.



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow