赞
踩
Transformer.jpeg
Transformer 用途
Transformer,顾名思义是转换器的意思。早在 RxJava1.x 版本就有了Observable.Transformer、Single.Transformer和Completable.Transformer,在2.x版本中变成了ObservableTransformer、SingleTransformer、CompletableTransformer、FlowableTransformer和MaybeTransformer。其中,FlowableTransformer和MaybeTransformer是新增的。由于 RxJava2 将Observable拆分成 Observable 和 Flowable,所以多了一个FlowableTransformer。同时,Maybe是 RxJava2 新增的一个类型,所以多了MaybeTransformer。
Transformer 能够将一个 Observable/Flowable/Single/Completable/Maybe 对象转换成另一个 Observable/Flowable/Single/Completable/Maybe 对象,和调用一系列的内联操作符是一模一样的。
举个简单的例子,写一个transformer()方法将一个发射整数的Observable转换为发射字符串的Observable。
public static ObservableTransformer transformer() {
return new ObservableTransformer() {
@Override
public ObservableSource apply(@NonNull Observable upstream) {
return upstream.map(new Function() {
@Override
public java.lang.String apply(@NonNull Integer integer) throws Exception {
return java.lang.String.valueOf(integer);
}
});
}
};
}
接下来是使用transformer()方法,通过标准的RxJava的操作。
Observable.just(123,456)
.compose(transformer())
.subscribe(new Consumer() {
@Override
public void accept(@io.reactivex.annotations.NonNull String s) throws Exception {
System.out.println("s="+s);
}
});
最后打印了二次,分别是
s=123
s=456
通过这个例子,可以简单和直观地了解到Transformer的作用。
其实,在大名鼎鼎的图片加载框架 Glide 以及 Picasso 中也有类似的transform概念,能够将图形进行变换。
跟compose操作符相结合
compose操作于整个数据流中,能够从数据流中得到原始的Observable/Flowable...
当创建Observable/Flowable...时,compose操作符会立即执行,而不像其他的操作符需要在onNext()调用后才执行。
常用的场景
1. 切换到主线程
对于网络请求,我们经常会做如下的操作来切换线程。
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
于是,我做了一个简单的封装。
import io.reactivex.FlowableTransformer
import io.reactivex.ObservableTransformer
import io.reactivex.android.schedulers.AndroidSchedulers
import io.reactivex.schedulers.Schedulers
/**
* Created by Tony Shen on 201
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。