RxJava操作符的应用场景

作者: 绮怀先生 | 来源:发表于2016-05-03 20:52 被阅读456次

前言

在项目中使用了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

**ReativeX 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所学未深,后续如有学到新的操作符,将会更新
如果不合理,望不吝指正.

相关文章

网友评论

    本文标题:RxJava操作符的应用场景

    本文链接:https://www.haomeiwen.com/subject/rvhkrttx.html