RxJava v1到v2

时间:2018-01-22 17:49:44

标签: java java-8 rx-java rx-java2

我正在尝试学习RxJava 2但是从昨天下午开始我很难尝试从v1转换到RxJava库的v2 ...我遇到了这个我可以使用的函数我正在做的一些事情,以帮助我理解整个反应式编程范例。

List<Integer> emitList = ...;
Observable<Integer> observable = Observable.from(emitList);

observable
        .subscribeOn(Schedulers.newThread())
        .parallel((a) -> {
            return a
            .filter((i) -> {
                return i % 2 == 0;
            })
            .doOnNext((xx) -> {
                System.out.println("parallel thread in: " + ThreadUtils.currentThreadName());
                System.out.println("parallel: " + xx);
                ThreadUtils.sleep(10);
                System.out.println("parallel thread out: " + ThreadUtils.currentThreadName());
            });
        },
        Schedulers.io()
        )
        .subscribe(
                (i) -> {
                    System.out.println("onNext thread entr: " + ThreadUtils.currentThreadName());
                    System.out.println(i);
                    System.out.println("onNext thread exit: " + ThreadUtils.currentThreadName());
                },
                (t) -> {
                    t.printStackTrace();
                },
                () -> {
                    System.out.println("onCompleted()");
                }
        );

我得到的最远的是:

Observable<Integer> observable = ....
observable.subscribeOn(Schedulers.newThread())
        .filter(i -> i % 2 == 0)
        .doOnNext(i -> {
          System.out.println("parallel thread in: " + threadName());
          System.out.println("parallel: " + i);
          Thread.sleep(10);
        })
        .subscribe(
                number -> System.out.println(threadName() + ": " + number),
                throwable -> System.err.println(threadName() + ": " + throwable.toString()),
                () -> System.out.println(threadName() + ": Completed!")

        );

我知道我所做的事情有很多错误..对于初学者来说,过滤和doOnNext是并行子句的内部,而在我的&#34;方法&#34;它外面,谁知道还有什么。 我尝试对RxJava repo进行测试,但我无法识别出与此相似的任何内容。我查看了Flowable和ParallelFlowable,但它们与我能找到的如何在我的版本上实现并行性的点不同...它没有打印出来的东西。

1 个答案:

答案 0 :(得分:1)

RxJava 2中的并行处理与Flowable绑定,并使用与Observable相同的流畅API设计:

Flowable<Integer> f = ....
f.subscribeOn(Schedulers.newThread())
    .parallel()                          // <---------------------------------
    .runOn(Schedulers.computation())     // <---------------------------------
    .filter(i -> i % 2 == 0)
    .doOnNext(i -> {
      System.out.println("parallel thread in: " + threadName());
      System.out.println("parallel: " + i);
      Thread.sleep(10);
    })
    .sequential()                        // <---------------------------------
    .subscribe(
            number -> System.out.println(threadName() + ": " + number),
            throwable -> System.err.println(threadName() + ": " + throwable.toString()),
            () -> System.out.println(threadName() + ": Completed!")
    );

    Thread.sleep(10000);