ReactiveX Java流程尽早完成?

时间:2017-04-18 09:30:09

标签: java reactive-programming reactivex

public class ReactiveExample {

    public static void main(String[] args) throws InterruptedException, NumberFormatException, UnsupportedEncodingException {

        Observable.range(1, 5).subscribe(
                System.out::println,
                error -> System.out.println("error"),
                () -> System.out.println("completed")
        );

    }

}

打印出来的结果是rx.internal.util.ScalarSynchronousObservable@2fad386b

在观察到可观察物后,我得到:

Process finished with exit code 0

我刚开始使用ReactiveX并且已经学习了一些教程。我的假设是上面的代码会不断地传输数据:

1-2-3-4-5-1-2-3-4-5...并继续打印该值。为什么我的程序会立即停止?是否在观察到前5位后才结束?如何更改此值以连续传输值并在这些值循环时打印它们?另外,我如何实际打印值而不是可观察对象引用?

1 个答案:

答案 0 :(得分:1)

range: Returns an Observable that emits a sequence of Integers within a specified range.

所以你的假设是错误的。 range不会重复任何内容。为此,您需要使用repeat

Observable.range(1, 5).repeat().subscribe(
  System.out::println,
  error -> System.out.println("error"),
  () -> System.out.println("completed")
);