반응형
Java 8로 무한 스트림을 만드는 방법
외부 라이브러리없이 java-8 을 사용하여 무한 스트림을 만드는 쉬운 방법이 있습니까?
예를 들어 Scala에서 :
Iterator.iterate(0)(_ + 2)
예, 쉬운 방법이 있습니다.
IntStream.iterate(0, i -> i + 2);
사용 사례로 :
IntStream.iterate(0, i -> i + 2)
.limit(100)
.forEach(System.out::println);
2 단계로 증가하는 0에서 198까지 인쇄합니다.
일반적인 방법은 다음과 같습니다.
Stream.iterate(T seed, UnaryOperator<T> f);
후자는 사용에있어 더 드문 경우 일 수 있습니다.
다음은 그 예입니다.
PrimitiveIterator.OfInt it = new PrimitiveIterator.OfInt() {
private int value = 0;
@Override
public int nextInt() {
return value++;
}
@Override
public boolean hasNext() {
return true;
}
};
Spliterator.OfInt spliterator = Spliterators.spliteratorUnknownSize(it,
Spliterator.DISTINCT | Spliterator.IMMUTABLE |
Spliterator.ORDERED | Spliterator.SORTED);
IntStream stream = StreamSupport.intStream(spliterator, false);
보시다시피 약간 장황합니다. 이 스트림의 처음 10 개 요소를 인쇄하려면 :
stream.limit(10).forEach(System.out::println);
물론 Scala 예제에서와 같이 요소를 변환 할 수도 있습니다.
IntStream plusTwoStream = stream.map(n -> n + 2);
거기에 내장 된 것을 무한한주의는 스트림 java.util.Random.ints()
당신에게 무작위 정수의 무한 스트림을 제공한다.
Java 8 에는 또 다른 가능한 솔루션이 있습니다 .
AtomicInteger adder = new AtomicInteger();
IntStream stream = IntStream.generate(() -> adder.getAndAdd(2));
중요 : 숫자 순서는 스트림이 순차적 인 경우에만 유지됩니다.
의 새 버전이 Java 9IntStream.iterate
이후 추가 되었다는 점도 주목할 가치가 있습니다 .
static IntStream iterate(int seed,
IntPredicate hasNext,
IntUnaryOperator next);
- seed- 초기 요소;
- hasNext- 스트림이 종료되어야하는시기를 결정하기 위해 요소에 적용 할 술어.
- next- 새 요소를 생성하기 위해 이전 요소에 적용 할 함수.
예 :
IntStream stream = IntStream.iterate(0, i -> i >= 0, i -> i + 2);
IntStream.iterate(0, i -> i < 10, i -> i + 2).forEach(System.out::println);
스트림과 소비자를 구현하여 고유 한 InfiniteStream을 구축하고 둘 다 구성 할 수 있으며 데이터를 다음과 같이 대기열에 추가하려면 대기열이 필요할 수 있습니다.
public class InfiniteStream<T> implements Consumer<T>, Stream<T> {
private final Stream<T> stream;
private final Queueing q;
...
public InfiniteStream(int length) {
this.q = new Queueing(this.length);
this.stream = Stream.generate(q);
...
}
//implement stream methods
//implement accept
}
여기에서 전체 코드를 확인하십시오 https://gist.github.com/bassemZohdy/e5fdd56de44cea3cd8ff
참고 URL : https://stackoverflow.com/questions/22483554/how-to-create-an-infinite-stream-with-java-8
반응형
'IT박스' 카테고리의 다른 글
C #에서 속성을 재정의 할 수 있습니까? (0) | 2020.11.15 |
---|---|
모든 것이 "최신"상태 인 경우에도 git이 수신 후 후크를 실행하도록합니다. (0) | 2020.11.15 |
RC.1에서는 바인딩 구문을 사용하여 일부 스타일을 추가 할 수 없습니다. (0) | 2020.11.15 |
Promise catch에서 오류 다시 던지기 (0) | 2020.11.15 |
함수에서 char *와 char []를 반환하는 것의 차이점은 무엇입니까? (0) | 2020.11.15 |