반응형
Scala에서 Iterator와 Stream의 차이점은 무엇입니까?
Iterator와 Stream 모두 게으르고 요소를 마음의 내용으로 계속 반환 할 수있는 것 같습니다. 둘의 차이점은 무엇입니까?
스트림 메모 와 반복자는 그렇지 않습니다. 동일한 스트림을 여러 번 탐색하고 매번 동일한 결과를 얻을 수 있습니다. 반면 반복자는 한 번만 순회 할 수 있습니다.
둘 다 현재 요소에 액세스하기위한 구성이며 아직 알려지지 않은 나머지 요소 목록 (게으른 꼬리)을 가지고 있습니다.
Iterator
한 번만 이동할 수있는 명령형 구조입니다.
Stream
기능적 구조입니다. 이론적으로는 여러 번 탐색 할 수 있지만 (다른 사람들이 언급했듯이 이미 계산 된 부분을 다시 계산하지 않음) 실제로 Streams가 무한하거나 매우 크기 때문에 (그래서 처음에 사용하는 것입니다) 전체 스트림에 대한 참조는 그다지 의미가 없습니다 (메모리 부족에 부딪히기 쉽습니다).
- 따라서 항상 사용하여 스트림을 정의
def
해야하며 수명이 긴 범위를 가진 지역 변수에 넣지 마십시오. - Streams를 사용하여 재귀 함수를 작성할 때도 미묘한 차이가 있습니다.
- Scala
Stream
가 머리에 게으르지 않다는 사실로 인해 예상치 못한 동작이 발생할 수 있습니다.
일반적으로 평범한 Stream
s 를 피하는 것이 마음에 더 안전합니다 . 대안은 EphemeralStream
약한 참조를 사용하여 참조되지 않은 부분을 자동으로 잊어 버리는 Scalaz를 사용하거나 반복 ( 여기 참조 ) 또는 유사한 것을 사용하는 것 입니다.
참조 URL : https://stackoverflow.com/questions/1527962/difference-between-iterator-and-stream-in-scala
반응형
'developer tip' 카테고리의 다른 글
AngularJS의 재사용 가능한 구성 요소 (0) | 2020.12.31 |
---|---|
가끔 잘못된 viewstate 오류를 무시해야합니까? (0) | 2020.12.31 |
인증 된 (로그인 된) 사용자 세션으로 Scrapy 사용 (0) | 2020.12.31 |
날짜 열이있는 데이터 프레임을 시계열로 변환 (0) | 2020.12.31 |
n 차원 그리드 유형에 대한 cojoin 또는 cobind 작성 (0) | 2020.12.31 |