前言
在项目中使用了RxJava了,真切感受到其强大,对比AsyncTask,简直是云泥之
别。在项目替换Android原生的AsyncTask以及handler成使用RxJava生出感慨,
实在是爽,代码逻辑清晰极了。
注:本篇博文适合已有一定RxJava基础知识阅读。
1,from操作符
这一个操作符我用的最多,那么它最佳的应用场景是什么呢?
- 当你有一个堆数据(Future、Iterable和数组)需要处理,且处理逻辑相同时。这样说或许有些抽象,打个比喻:相信大家都配过钥匙,假如我要配几把同一个门的钥匙,那么制造这几把钥匙的流程都是一模一样的。而更简洁的概括就是-----有重复性操作时就用它就准没错了。
2,map操作符
map名词是地图的意思,那么这样理解这个操作符就很想不通这个操作符的 应用场景了,但我们敲代码的不可能不熟悉这一个数据结构.
在我使用这个操作符的理解中,map就是变换需要操作的数据内容或者结构的意思。所以其使用场景显而易见:当原始数据不能满足我们的需求,但我们却需要依赖这一原始数据去获取满足我们需求的数据时,那么就用它,准没错。
比如:我有一个图片url集合,但我的需求却是依次获取到bitmap,显示在ImageView中,那么用该操作符就能解决问题了
官方文档原文:
transform the items emitted by an Observable by applying a function to each item.
我的理解:
通过使用map中的方法对Observable中发射出来的所有数据进行变换.(翻译如有错误,望指正)
ReactiveX 官方文档-map
ps:有兴趣的话更希望大家看官方文档,更加原汁原味
3,filter操作符
filter-----过滤数据.这一个操作符浅显易懂,根据一些条件过滤掉不需要的数据.
比如说:*我有一个图片url集合,我的需求是依次获取到bitmap,一些像素不清晰的,我希望排除掉,不显示在ImageView,而清晰的才显示在ImageView中.
综合三个操作符的伪代码
Observable
.from(filePathStrS)// String[] filePathStrS :本地图片路径数组
.map(new Func1<String, Bitmap>() {
@Override
public Bitmap call(String s) {
return Utils.getBitmapFromFile(photoPath + s);//通过map将String变换成Bitmap
}
})
.filter(new Func1<Bitmap, Boolean>() {
@Override
public Boolean call(Bitmap bitmap) {
return bitmap != null;//筛选掉空文件
}
})
.subscribeOn(Schedulers.io())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(new Action1<Bitmap>() {
@Override
public void call(Bitmap bitmap) {//主线程显示数据
questionBitmapList.set(questionInPicCount, bitmap);
QuestionShowAdapter.notifyDataSetChanged();
}
}, new Action1<Throwable>() {
@Override
public void call(Throwable throwable) {
throwable.printStackTrace();
}
}, new Action0() {
@Override
public void call() {
}
});
RxJava所学未深,后续如有学到新的操作符,将会更新
如果不合理,望不吝指正.