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()
的区别: