1、compose 操作符
compose 是用于复用的,可以把几个常用的操作函数封装为一个函数来复用代码,但是需要结合 ObservableTransformer 来使用的(在 RxJava2 中)
参考文章(使用的还会 RxJava1 的逻辑,会有差异):
RxJava中操作符组合的复用利器compose()
RxJava 的 compose() 操作函数实战
演示代码如下:
比如我实现一段切换线程的放方法:
public static <T> ObservableTransformer<T, T> applySchedulers() {
return new ObservableTransformer<T, T>() {
@Override
public ObservableSource<T> apply(Observable<T> observable) {
return observable.subscribeOn(Schedulers.io()).observeOn(Schedulers.newThread());
}
};
}
然后在具体使用的时候:
Observable.just(1, 2, 4, 5, 6)
.compose(applySchedulers())
.subscribe(integer -> System.out.println("integer ="+integer));
就可以使用 compose() 方法将 applySchedulers() 方法中的切换线程的逻辑应用于上面的代码,达到复用的目的。
而且在 RxJava 的 compose() 操作函数实战 中说 applySchedulers() 方法中每次都会 new 一个新的 ObservableTransformer,然后里面有说怎么实例化一个 ObservableTransformer 而达到复用的目的,但是目前实践了,无法达到文章的效果。
比如有如下测试代码,
public class Test {
public static void main(String args[]) {
System.out.println("===========");
Observable.just(1, 2, 4, 5, 6)
.compose(applySchedulers())
.subscribe(integer -> System.out.println("integer =" + integer));
}
static final ObservableTransformer ot =
observable -> observable
.subscribeOn(Schedulers.io())
.observeOn(Schedulers.newThread());
@SuppressWarnings("unchecked")
public static <T> ObservableTransformer<T, T> applySchedulers() {
return (ObservableTransformer<T, T>) ot;
}
}
结果输出如下:
未达到预期效果。
然后下图是与 flatMap() 的区别:


本文介绍了RxJava中的compose()操作符及其应用场景,演示了如何通过compose()实现线程切换逻辑的复用,并对比了compose()与flatMap()的区别。
927

被折叠的 条评论
为什么被折叠?



