RxJava操作符的應(yīng)用場(chǎng)景

前言

在項(xiàng)目中使用了RxJava了,真切感受到其強(qiáng)大,對(duì)比AsyncTask,簡(jiǎn)直是云泥之
別。在項(xiàng)目替換Android原生的AsyncTask以及handler成使用RxJava生出感慨,
實(shí)在是爽,代碼邏輯清晰極了。

注:本篇博文適合已有一定RxJava基礎(chǔ)知識(shí)閱讀。

1,from操作符

這一個(gè)操作符我用的最多,那么它最佳的應(yīng)用場(chǎng)景是什么呢?

  • 當(dāng)你有一個(gè)堆數(shù)據(jù)(Future、Iterable和數(shù)組)需要處理,且處理邏輯相同時(shí)。這樣說或許有些抽象,打個(gè)比喻:相信大家都配過鑰匙,假如我要配幾把同一個(gè)門的鑰匙,那么制造這幾把鑰匙的流程都是一模一樣的。而更簡(jiǎn)潔的概括就是-----有重復(fù)性操作時(shí)就用它就準(zhǔn)沒錯(cuò)了。

2,map操作符

map名詞是地圖的意思,那么這樣理解這個(gè)操作符就很想不通這個(gè)操作符的 應(yīng)用場(chǎng)景了,但我們敲代碼的不可能不熟悉這一個(gè)數(shù)據(jù)結(jié)構(gòu).

在我使用這個(gè)操作符的理解中,map就是變換需要操作的數(shù)據(jù)內(nèi)容或者結(jié)構(gòu)的意思。所以其使用場(chǎng)景顯而易見:當(dāng)原始數(shù)據(jù)不能滿足我們的需求,但我們卻需要依賴這一原始數(shù)據(jù)去獲取滿足我們需求的數(shù)據(jù)時(shí),那么就用它,準(zhǔn)沒錯(cuò)。
比如:我有一個(gè)圖片url集合,但我的需求卻是依次獲取到bitmap,顯示在ImageView中,那么用該操作符就能解決問題了

官方文檔原文:
transform the items emitted by an Observable by applying a function to each item.
我的理解:
通過使用map中的方法對(duì)Observable中發(fā)射出來(lái)的所有數(shù)據(jù)進(jìn)行變換.(翻譯如有錯(cuò)誤,望指正)
ReactiveX 官方文檔-map

**ReativeX map操作符的流程示意圖**

ps:有興趣的話更希望大家看官方文檔,更加原汁原味

3,filter操作符

filter-----過濾數(shù)據(jù).這一個(gè)操作符淺顯易懂,根據(jù)一些條件過濾掉不需要的數(shù)據(jù).
比如說:*我有一個(gè)圖片url集合,我的需求是依次獲取到bitmap,一些像素不清晰的,我希望排除掉,不顯示在ImageView,而清晰的才顯示在ImageView中.

綜合三個(gè)操作符的偽代碼

Observable
.from(filePathStrS)// String[] filePathStrS :本地圖片路徑數(shù)組 
.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) {//主線程顯示數(shù)據(jù)
        questionBitmapList.set(questionInPicCount, bitmap);
        QuestionShowAdapter.notifyDataSetChanged();

    }
}, new Action1<Throwable>() {
    @Override
    public void call(Throwable throwable) {
        throwable.printStackTrace();
    }
}, new Action0() {
    @Override
    public void call() {
    }
});

RxJava所學(xué)未深,后續(xù)如有學(xué)到新的操作符,將會(huì)更新
如果不合理,望不吝指正.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容