我正在尝试学习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,但它们与我能找到的如何在我的版本上实现并行性的点不同...它没有打印出来的东西。
答案 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);