RxJava學(xué)習(xí)筆記(三)

Map與FlatMap

map

  • 基礎(chǔ)概念

    map 是 RxJava中 最常見的變換操作符之一。

    它的作用就是對(duì) Observable 發(fā)送的每一個(gè)事件應(yīng)用一個(gè)函數(shù), 使得每一個(gè)事件都按照指定的函數(shù)去變化喂链。

    通俗的說,就是把被觀察者發(fā)送事件里面的對(duì)象轉(zhuǎn)換成你需要的對(duì)象胚想,然后發(fā)送給觀察者

  • 看圖識(shí)字

map把 Observable 里的圓形一個(gè)個(gè)轉(zhuǎn)換成方形,然后發(fā)射出去給 observer

map
  • 代碼示例

    比如說現(xiàn)在我需要把一個(gè)圖片連接下載到bitmap對(duì)象然后設(shè)置圖片

    mObservable.map(new Func1<String, Bitmap>() {
                @Override
                public Bitmap call(String url) {
                    return getBitmapFormUrl(url);
                }
            }).subscribe(new Action1<Bitmap>() {
                @Override
                public void call(Bitmap bitmap) { // 參數(shù)類型 Bitmap
                    imageView.setImageBitmap(bitmap);
                }
            });
    //Func1方法里,第一個(gè)泛型是接受轉(zhuǎn)換的數(shù)據(jù)類型声畏,第二個(gè)參數(shù)是轉(zhuǎn)換后的數(shù)據(jù)類型
    

flatMap

  • 基礎(chǔ)概念

FlatMap 將一個(gè)發(fā)送事件的上游 Observable 變換為多個(gè)發(fā)送事件的 Observables ,然后將它們發(fā)射的事件合并后放進(jìn)一個(gè)單獨(dú)的 Observable 里

  • 看圖識(shí)字

    Observable 發(fā)送了3個(gè)事件娄帖,分別是圓形的1也祠、2、3

    flatMap 將3個(gè)圓形事件轉(zhuǎn)換成發(fā)送三角形和正方形的事件近速,生成一個(gè)新的 Observable

    ?

flatmap

動(dòng)作分解

flatmap

  • 代碼示例

    現(xiàn)在我們有一個(gè)需求诈嘿,用戶需要先請(qǐng)求一個(gè)接口獲得 token ,然后根據(jù) token 再請(qǐng)求數(shù)據(jù)獲取 user 信息削葱,讓我們用示例代碼試試吧奖亚。

    //TODO 1.聲明一個(gè)獲取token的觀察者
     Observable<String> getTokenObservable = .....;
    
    

//TODO 2.將獲取token的觀察者轉(zhuǎn)換成獲取user的觀察者
Observable<UserAdapter> getUserObservable = getTokenObservable.flatMap(new Func1<String, Observable<User>>() {
@Override
public Observable<User> call(String token) {
return getUserObservable(token);//這里有一個(gè)獲取UserObservable的方法
}
});

//TODO 3.觀察者訂閱獲取user的被觀察者
getUserObservable.subscribe(new Action1<User>() {
@Override
public void call(User user) {
//成功拿到user
}
});

//動(dòng)作合并,更優(yōu)雅的寫法
getTokenObservable.flatMap(new Func1<String, Observable<User>>() {
            @Override
            public Observable<User> call(String token) {
                return getUserObservable(token);
            }
        }).subscribe(new Action1<User>() {
            @Override
            public void call(User userAdapter) {
                //成功拿到user
            }
        });
```
  • 特別聲明

    flatMap 并不保證事件的順序析砸,就是說上面的圖剛開始發(fā)送123轉(zhuǎn)換后昔字,觀察者接收到的可能就是213了。如果需要保證事件順序可以使用 concatMap

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末首繁,一起剝皮案震驚了整個(gè)濱河市作郭,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌弦疮,老刑警劉巖夹攒,帶你破解...
    沈念sama閱讀 221,888評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異胁塞,居然都是意外死亡咏尝,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,677評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門啸罢,熙熙樓的掌柜王于貴愁眉苦臉地迎上來编检,“玉大人,你說我怎么就攤上這事伺糠∶晌剑” “怎么了?”我有些...
    開封第一講書人閱讀 168,386評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵训桶,是天一觀的道長累驮。 經(jīng)常有香客問我酣倾,道長,這世上最難降的妖魔是什么谤专? 我笑而不...
    開封第一講書人閱讀 59,726評(píng)論 1 297
  • 正文 為了忘掉前任躁锡,我火速辦了婚禮,結(jié)果婚禮上置侍,老公的妹妹穿的比我還像新娘映之。我一直安慰自己,他們只是感情好蜡坊,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,729評(píng)論 6 397
  • 文/花漫 我一把揭開白布杠输。 她就那樣靜靜地躺著,像睡著了一般秕衙。 火紅的嫁衣襯著肌膚如雪蠢甲。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,337評(píng)論 1 310
  • 那天据忘,我揣著相機(jī)與錄音鹦牛,去河邊找鬼。 笑死勇吊,一個(gè)胖子當(dāng)著我的面吹牛曼追,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播汉规,決...
    沈念sama閱讀 40,902評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼礼殊,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了鲫忍?” 一聲冷哼從身側(cè)響起膏燕,我...
    開封第一講書人閱讀 39,807評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎悟民,沒想到半個(gè)月后坝辫,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,349評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡射亏,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,439評(píng)論 3 340
  • 正文 我和宋清朗相戀三年近忙,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片智润。...
    茶點(diǎn)故事閱讀 40,567評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡及舍,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出窟绷,到底是詐尸還是另有隱情锯玛,我是刑警寧澤,帶...
    沈念sama閱讀 36,242評(píng)論 5 350
  • 正文 年R本政府宣布,位于F島的核電站攘残,受9級(jí)特大地震影響拙友,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜歼郭,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,933評(píng)論 3 334
  • 文/蒙蒙 一遗契、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧病曾,春花似錦牍蜂、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,420評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至逼蒙,卻和暖如春贡茅,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背其做。 一陣腳步聲響...
    開封第一講書人閱讀 33,531評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留赁还,地道東北人妖泄。 一個(gè)月前我還...
    沈念sama閱讀 48,995評(píng)論 3 377
  • 正文 我出身青樓,卻偏偏與公主長得像艘策,于是被迫代替她去往敵國和親蹈胡。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,585評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容