[java] Java IntStream은 무엇을 사용해야 할지를 반복하고 생성합니까?
에 IntStream.iterate
대한 간단한 주문 버전 인 것 같습니다 IntStream.generate
. 사실인가요? 그렇지 않은 경우 핵심 차이점은 무엇입니까?
답변
서명이 어떻게 다른지 참고하십시오.
-
generate
는을 가져옵니다. 즉IntSupplier
, 아무것도주지 않고 정수를 생성해야합니다. 사용 예에는 동일한 정수의 상수 스트림 생성, 임의의 정수 스트림 생성이 포함됩니다. 스트림의 각 요소가 이전 요소와 어떻게 관련이 없는지 확인하십시오. -
iterate
aseed
와 aIntUnaryOperator
를 사용합니다. 즉 , 이전 요소를 기반으로 각 요소를 생성해야합니다 . 예를 들어, 유도 적으로 정의 된 시퀀스를 만드는 데 유용합니다. 이 경우 각 요소는 이전 요소에 의존 해야합니다 .
답변
-
IntStream.iterate
반환 명령IntStream
, 다른 손에IntStream.generate
다시 표시 정렬되지 않은IntStream
병렬 스트림 파이프 라인을 가속화에 도움이 될 수있다. -
IntStream.generate
Javadoc에 지정된대로 임의의 또는 상수 값을 생성하는 것이 바람직합니다. 반환 된 스트림의 특성에 가장 가깝습니다.
답변
순서 외에도 사용법도 약간 다릅니다. 메소드 서명을 살펴 보자.
iterate(int seed, IntUnaryOperator f)
generate(IntSupplier s)
반복은 이전 값에서 다음 값을 생성하는 데 사용되는 시작 값을 매개 변수 및 단항 연산자로 명시 적으로 지정했습니다. 내부 상태없이 운영자를 쉽게 변경할 수 없으며 문제없이 여러 장소에서 병렬로 재사용 할 수 있습니다.
사용 공급 업체 생성 그것들은 상수 또는 난수를 제공하거나 (1, 2, 3, …)과 같은 시리즈를 제공하기 위해 내부 상태가 필요합니다.