rxjavav1到v2
我正在尝试学习RxJava 2,但从昨天下午开始,我在尝试将RxJava库的v1转换为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())
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);