Iterator와 Stream은 모두 게으르며 엘리먼트를 마음 속에 담아 돌려 줄 수 있습니다. 둘의 차이점은 무엇입니까?스칼라의 Iterator와 Stream의 차이점은 무엇입니까?
답변
스트림 memoises 및 반복기는 그렇지 않습니다. 동일한 스트림을 여러 번 탐색하여 매번 동일한 결과를 얻을 수 있습니다. 반대로 Iterator는 한 번만 통과 할 수 있습니다.
두 요소는 아직 알려지지 않은 나머지 요소 (게으른 꼬리) 목록이있는 현재 요소에 액세스하기위한 구문입니다.
Iterator
은 한 번만 트래버스 할 수있는 필수 구성입니다.
Stream
은 기능적인 구조이다. 이론적으로 여러 번 트래버스 할 수 있습니다 (그리고 언급 된 다른 부분은 이미 계산 된 부분을 다시 계산하지 않습니다). 실제로 스트림은 무한하거나 매우 크기 때문에 (실제로는 처음 사용하는 이유입니다.) 전체 스트림에 대한 참조는별로 의미가 없습니다 (Out of Memory를 실행하는 것은 꽤 쉽습니다).
- 따라서 당신은 항상는
def
를 사용하여 스트림을 정의하고 수명이 긴 범위가 로컬 변수에 넣어해서는 안됩니다. - 이 또한 스트림을 사용하여 재귀 함수를 작성할 때 미묘,
일반적으로 그에게 마음에 안전과 같은 스칼라의 Stream
가 머리에 게으른 아니라는 사실로 인한 예기치 않은 동작이있을 수있다 일반 Stream
초를 피하십시오. 다른 방법으로 약한 참조를 사용하거나 참조 번호 Iteratees (here 참조) 또는 something similiar을 사용하여 자동 참조 된 Scalaz EphemeralStream
을 사용하고 있습니다.
궁금합니다. EphemeralStream이 기본 구현이 아닌 이유는 무엇입니까? 잊어 버린 부분은 언제나 데이터 계보 (함수 언어)에서 재구성 할 수 있습니다. 이것은 큰 디자인 결함처럼 들립니다. – tribbloid
- 1. iterator와 view의 차이점은 무엇입니까?
- 2. 스칼라의 가장 큰 특징은 무엇입니까?
- 3. 스칼라의 툴링의 현재 상태는 무엇입니까?
- 4. 스칼라의 제네릭
- 5. 소켓을 통한 Java Object Stream의 문제점
- 6. 스칼라의 비공개 필드 설정자
- 7. 스칼라의 기본 공용 액세스
- 8. 스칼라의 문자열 배열 문제
- 9. 동일한 클래스에서 Java Iterator와 Iterable을 구현 하시겠습니까?
- 10. JMS 대신 스칼라의 액터를 선호하는 디자인 결정은 무엇입니까?
- 11. 스칼라의 XML에서 w3c DOM으로의 변환은 무엇입니까?
- 12. 스칼라의 함수 정의에서 다중 매개 변수 절의 요점은 무엇입니까?
- 13. 스칼라의 훅 패턴
- 14. 스칼라의 경우 클래스 생성자
- 15. 스칼라의 기능적 반응 프로그래밍
- 16. 스칼라의 비트 스트림 라이브러리
- 17. 유형 클래스가있는 스칼라의 DAO
- 18. 스칼라의 액터 풀
- 19. 스칼라의 목록에서 요소 반환하기
- 20. println 대 스칼라의 System.out.println
- 21. 스칼라의 기본 매개 변수
- 22. 스칼라의 foreach와지도 초기화
- 23. 스칼라의 유한 성장 어레이
- 24. 스칼라의 프록시/위임자
- 25. 문자열 스칼라의 끝에서 문자 제거
- 26. 변수 값을 스칼라의 유형으로 사용
- 27. SymPy와 스칼라의 치환이 작동하지 않습니까?
- 28. 스칼라의 제네릭 함수에 대한 도움말
- 29. 왜 스칼라의 TreeSet이 SortedSet을 반환하는지
- 30. 스칼라의 패턴 일치 구조 유형
memoization과 관련하여 - N 번째 요소에 액세스하는 경우 액세스 시간이 O (1) 또는 O (N)입니까? – ryeguy
@ryeguy Stream은 요소 값을 캐시하기 위해 링크 된 목록을 작성하므로 O (n)입니다. –
그렇다면 Stream과 Iterable의 차이점은 무엇입니까? –