Java IntStream은 무엇을 사용해야 할지를 반복하고 생성합니까?


19

IntStream.iterate대한 간단한 주문 버전 인 것 같습니다 IntStream.generate. 사실인가요? 그렇지 않은 경우 핵심 차이점은 무엇입니까?

답변:


21

서명이 어떻게 다른지 참고하십시오.

  • generate는을 가져옵니다. 즉 IntSupplier, 아무것도주지 않고 정수를 생성해야합니다. 사용 예에는 동일한 정수의 상수 스트림 생성, 임의의 정수 스트림 생성이 포함됩니다. 스트림의 각 요소가 이전 요소와 어떻게 관련이 없는지 확인하십시오.

  • iteratea seed와 a IntUnaryOperator를 사용합니다. 즉 , 이전 요소를 기반으로 각 요소를 생성해야합니다 . 예를 들어, 유도 적으로 정의 된 시퀀스를 만드는 데 유용합니다. 이 경우 각 요소는 이전 요소에 의존 해야합니다 .


따라서 상태를 저장해야 할 때 반복 사례를 사용하면 이것이 핵심 차이점입니다. 다른 곳에 상태를 저장해야합니다. 그리고 Iterate는 명령을 내리고, 생성은 순서가 맞지 않으며, 이는 패러렐 리즘에 적합하다
JJ Beam

8
  1. IntStream.iterate반환 명령IntStream , 다른 손에 IntStream.generate다시 표시 정렬되지 않은IntStream 병렬 스트림 파이프 라인을 가속화에 도움이 될 수있다.

  2. IntStream.generate Javadoc에 지정된대로 임의의 또는 상수 값을 생성하는 것이 바람직합니다. 반환 된 스트림의 특성에 가장 가깝습니다.


5

순서 외에도 사용법도 약간 다릅니다. 메소드 서명을 살펴 보자.

  • iterate(int seed, IntUnaryOperator f)
  • generate(IntSupplier s)

반복은 이전 값에서 다음 값을 생성하는 데 사용되는 시작 값을 매개 변수 및 단항 연산자로 명시 적으로 지정했습니다. 내부 상태없이 운영자를 쉽게 변경할 수 없으며 문제없이 여러 장소에서 병렬로 재사용 할 수 있습니다.

사용 공급 업체 생성 그것들은 상수 또는 난수를 제공하거나 (1, 2, 3, ...)과 같은 시리즈를 제공하기 위해 내부 상태가 필요합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.