【发布时间】:2015-07-14 18:47:20
【问题描述】:
我正在尝试使用 RxJava 编写一个简单的程序来生成无限的自然数序列。所以,到目前为止,我已经找到了两种使用 Observable.timer() 和 Observable.interval() 生成数字序列的方法。我不确定这些功能是否是解决此问题的正确方法。我期待一个像我们在 Java 8 中那样的简单函数来生成无限自然数。
IntStream.iterate(1, value -> value +1).forEach(System.out::println);
我尝试将 IntStream 与 Observable 一起使用,但无法正常工作。它仅向第一个订阅者发送无限的数字流。如何正确生成无限自然数列?
import rx.Observable;
import rx.functions.Action1;
import java.util.stream.IntStream;
public class NaturalNumbers {
public static void main(String[] args) {
Observable<Integer> naturalNumbers = Observable.<Integer>create(subscriber -> {
IntStream stream = IntStream.iterate(1, val -> val + 1);
stream.forEach(naturalNumber -> subscriber.onNext(naturalNumber));
});
Action1<Integer> first = naturalNumber -> System.out.println("First got " + naturalNumber);
Action1<Integer> second = naturalNumber -> System.out.println("Second got " + naturalNumber);
Action1<Integer> third = naturalNumber -> System.out.println("Third got " + naturalNumber);
naturalNumbers.subscribe(first);
naturalNumbers.subscribe(second);
naturalNumbers.subscribe(third);
}
}
【问题讨论】:
标签: java system.reactive reactive-programming rx-java