rxjavav1到v2

rxjavav1到v2,java,java-8,rx-java,rx-java2,Java,Java 8,Rx Java,Rx Java2,我正在尝试学习RxJava 2,但从昨天下午开始,我在尝试将RxJava库的v1转换为v2时遇到了麻烦。。。我遇到了这个函数,我可以用它来帮助我理解整个反应式编程范式 List<Integer> emitList = ...; Observable<Integer> observable = Observable.from(emitList); observable .subscribeOn(Schedulers.newThread())

我正在尝试学习RxJava 2,但从昨天下午开始,我在尝试将RxJava库的v1转换为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()");
                }
        );
List emitList=。。。;
可观察的可观察的=可观察的来自(列表);
可观察
.subscribeOn(Schedulers.newThread())
.平行((a)->{
归还
.filter((i)->{
返回i%2==0;
})
.doOnNext((xx)->{
System.out.println(“并行线程输入:”+ThreadUtils.currentThreadName());
System.out.println(“并行:+xx”);
睡眠(10);
System.out.println(“并行线程输出:+ThreadUtils.currentThreadName());
});
},
Schedulers.io()
)
.订阅(
(i) ->{
System.out.println(“onNext thread entr:+ThreadUtils.currentThreadName());
系统输出打印LN(i);
System.out.println(“onNext线程出口:+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!")

        );
Observable=。。。。
observable.subscribeOn(Schedulers.newThread())
.filter(i->i%2==0)
.doOnNext(i->{
System.out.println(“并行线程输入:“+threadName()”);
System.out.println(“并行:+i”);
睡眠(10);
})
.订阅(
编号->系统.out.println(threadName()+“:”+编号),
throwable->System.err.println(threadName()+”:“+throwable.toString()),
()->System.out.println(threadName()+“:Completed!”)
);
我知道我所做的有很多错误。。首先,过滤和doOnNext是平行子句的内部,而在我的“方法”中是外部,谁知道还有什么。
我试图通过RxJava回购协议的测试,但我无法确定任何类似的测试。我查看了Flowable和ParallelFlowable,但它们有很大的不同,我找不到如何在我的版本上实现并行性。。。顺便说一句,它不会打印任何东西。

RxJava 2中的并行处理与可流动的
绑定,并使用与可观察的
相同的流畅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);
可流动f=。。。。
f、 subscribeOn(Schedulers.newThread())
.parallel()//{
System.out.println(“并行线程输入:“+threadName()”);
System.out.println(“并行:+i”);
睡眠(10);
})
.sequential()//System.out.println(threadName()+“:”+编号),
throwable->System.err.println(threadName()+”:“+throwable.toString()),
()->System.out.println(threadName()+“:Completed!”)
);
睡眠(10000);