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