RxJava操作符之過濾操作符(五)

前言

上一篇文章我們學(xué)習(xí)了轉(zhuǎn)換類操作符钥勋,本篇我們將一起來學(xué)習(xí)RxJava過濾類操作符炬转。過濾操作符主要是用來對事件數(shù)據(jù)進(jìn)行過濾與篩選控汉,只返回滿足條件的數(shù)據(jù),一起來看下都有哪些返吻。

過濾操作符

Filter

filter操作符姑子,按照一定的約束條件過濾序列中我們不想要的數(shù)據(jù),只返回滿足條件的數(shù)據(jù)給觀察者测僵。

//結(jié)合flatmap街佑,過濾出各小區(qū)中房源大小大于120平的房子
Observable.from(communities)
        .flatMap(new Func1<Community, Observable<House>>() {
            @Override
            public Observable<House> call(Community community) {
                return Observable.from(community.getHouses());
            }
        })
        .filter(new Func1<House, Boolean>() {
            @Override
            public Boolean call(House house) {
                return house.getSize() > 120f;
            }
        })
        .subscribe(new Action1<House>() {
            @Override
            public void call(House house) {
                Log.e("rx_test", "filter:大于120平的房子:" + house.getCommunityName() + "小區(qū),大泻纯俊:" + house.getSize());
            }
        });

由代碼可見沐旨,我們需要new一個(gè)Func1對象給filter(),Func1<House, Boolean>()中第一個(gè)是由觀測序列傳入數(shù)據(jù)的類型榨婆,第二個(gè)是返回是否過濾的Boolean對象磁携。滿足filter()的條件則返回true,否則返回false良风。并將返回為true的數(shù)據(jù)發(fā)射給觀察者谊迄。

輸出結(jié)果:

filter:大于120平的房子:東方花園小區(qū),大醒萄搿:144.8
filter:大于120平的房子:東方花園小區(qū)统诺,大小:144.8
filter:大于120平的房子:馬德里春天小區(qū)疑俭,大辛改亍:123.4
filter:大于120平的房子:馬德里春天小區(qū),大谐А:123.4
filter:大于120平的房子:帝豪家園小區(qū)啄寡,大小:188.7
filter:大于120平的房子:帝豪家園小區(qū)哩照,大型ξ铩:188.7
filter:大于120平的房子:帝豪家園小區(qū),大衅厦搿:188.7

原理圖:


實(shí)際項(xiàng)目開發(fā)中姻乓,filter操作符可用來過濾數(shù)據(jù)集合中的null值,方便實(shí)用眯牧。

Take

take(int count)操作符蹋岩,可用來截取觀測序列中前count個(gè)元素并發(fā)射。

//take:獲取前兩個(gè)小區(qū)名
Observable.from(communities)
        .take(2)
        .subscribe(new Action1<Community>() {
            @Override
            public void call(Community community) {
                Log.e("rx_test", "take:前兩個(gè)小區(qū):" + community.getCommunityName());
            }
        });

輸出結(jié)果:

take:前兩個(gè)小區(qū):東方花園
take:前兩個(gè)小區(qū):馬德里春天

原理圖:

TakeLast

takeLast(int count)操作符学少,顧名思義剪个,截取觀測序列中后count個(gè)元素并發(fā)射。

//takeLast:獲取后兩個(gè)小區(qū)名
Observable.from(communities)
        .takeLast(2)
        .subscribe(new Action1<Community>() {
            @Override
            public void call(Community community) {
                Log.e("rx_test", "takeLast:后兩個(gè)小區(qū):" + community.getCommunityName());
            }
        });

輸出結(jié)果:

takeLast:后兩個(gè)小區(qū):馬德里春天
takeLast:后兩個(gè)小區(qū):帝豪家園

原理圖:


takeUntil操作符有兩種類型的入?yún)ⅰ?p>

1.takeUntil(Observable)
訂閱并開始發(fā)射原始Observable版确,同時(shí)監(jiān)視我們提供的第二個(gè)Observable扣囊。如果第二個(gè)Observable發(fā)射了一項(xiàng)數(shù)據(jù)或者發(fā)射了一個(gè)終止通知乎折,takeUntil()返回的Observable會(huì)停止發(fā)射原始Observable并終止。

//observableA每300ms發(fā)射一個(gè)Long型自增數(shù)據(jù)
//observableB每800ms發(fā)射一個(gè)Long型自增數(shù)據(jù)
Observable<Long> observableA = Observable.interval(300, TimeUnit.MILLISECONDS);
Observable<Long> observableB = Observable.interval(800, TimeUnit.MILLISECONDS);
observableA.takeUntil(observableB)
        .subscribe(new Subscriber<Long>() {
            @Override
            public void onCompleted() {
                Log.e("rx_test", "takeUntil(Observable):" + "onCompleted");
            }
            
            @Override
            public void onError(Throwable e) {
                Log.e("rx_test", "takeUntil(Observable):onError:" + e.getMessage());
            }
            
            @Override
            public void onNext(Long aLong) {
                Log.e("rx_test", "takeUntil(Observable):onNext:" + aLong);
            }
        });

輸出結(jié)果:

takeUntil(Observable):onNext:0
takeUntil(Observable):onNext:1
takeUntil(Observable):onCompleted

由輸出結(jié)果可看出侵歇,訂閱之后骂澄,observableA依次發(fā)射0,1之后就發(fā)射onCompleted標(biāo)記停止了惕虑。這是由于observableA每300ms發(fā)射一次坟冲,當(dāng)發(fā)射完1后,時(shí)間已過去600ms溃蔫,到800ms時(shí)observableB開始發(fā)射數(shù)據(jù)健提,takeUntil起作用則中斷了observableA的發(fā)射。

原理圖:


2.takeUntil(Func1)
通過傳入的Func1中的call()方法判斷是否中止發(fā)射數(shù)據(jù)伟叛。

//takeUntil:與flatmap結(jié)合過濾直到房價(jià)大于500時(shí)中斷當(dāng)前小Observable發(fā)射House
Observable.from(communities)
        .flatMap(new Func1<Community, Observable<House>>() {
            @Override
            public Observable<House> call(Community community) {
                return Observable.from(community.getHouses());
            }
        })
        .takeUntil(new Func1<House, Boolean>() {
            @Override
            public Boolean call(House house) {
                return house.getPrice() > 500;
            }
        })
        .subscribe(new Action1<House>() {
            @Override
            public void call(House house) {
                Log.e("rx_test", "takeUntil:大于500時(shí)中斷發(fā)射:" + house.getCommunityName() + "小區(qū)私痹,房價(jià):" + house.getPrice());
            }
        });

輸出結(jié)果:

takeUntil(Func1):大于500時(shí)中斷發(fā)射:東方花園小區(qū),房價(jià):200
takeUntil(Func1):大于500時(shí)中斷發(fā)射:東方花園小區(qū)统刮,房價(jià):520

原理圖:

TakeWhile

takeWhile操作符紊遵,類似于takeUntil(Func1),不過takeWhile()是當(dāng)Observable發(fā)射的數(shù)據(jù)不滿足條件時(shí)中止Observable的發(fā)射网沾。

//takeWhile:當(dāng)發(fā)射的數(shù)據(jù)等于3時(shí)中止發(fā)射
Observable.just(1, 2, 3, 4, 5)
        .takeWhile(new Func1<Integer, Boolean>() {
            @Override
            public Boolean call(Integer integer) {
                return integer != 3;
            }
        })
        .subscribe(new Action1<Integer>() {
            @Override
            public void call(Integer integer) {
                Log.e("rx_test", "takeWhile:" + integer);
            }
        });

輸出結(jié)果:

takeWhile:1
takeWhile:2

原理圖:

Skip

skip(int count)操作符癞蚕,忽略發(fā)射觀測序列的前count項(xiàng)數(shù)據(jù)蕊爵。

//忽略前兩個(gè)小區(qū)數(shù)據(jù)
Observable.from(communities)
        .skip(2)
        .subscribe(new Action1<Community>() {
            @Override
            public void call(Community community) {
                Log.e("rx_test", "skip:忽略前兩個(gè)小區(qū):" + community.getCommunityName());
            }
        });

輸出結(jié)果:

skip:忽略前兩個(gè)小區(qū):帝豪家園

原理圖:


SkipLast

skipLast(int count)操作符辉哥,忽略發(fā)射觀測序列的后count項(xiàng)數(shù)據(jù)。

//忽略后兩個(gè)小區(qū)數(shù)據(jù)
Observable.from(communities)
        .skipLast(2)
        .subscribe(new Action1<Community>() {
            @Override
            public void call(Community community) {
                Log.e("rx_test", "skip:忽略后兩個(gè)小區(qū):" + community.getCommunityName());
            }
        });

輸出結(jié)果:

忽略后兩個(gè)小區(qū):東方花園

原理圖:

SkipUntil

skipUntil操作符攒射,與takeUntil()相反醋旦。訂閱并開始發(fā)射原始Observable,同時(shí)監(jiān)視我們提供的第二個(gè)Observable会放。如果第二個(gè)Observable發(fā)射了一項(xiàng)數(shù)據(jù)或者發(fā)射了一個(gè)終止通知饲齐,skipUntil()返回的Observable才會(huì)開始發(fā)射數(shù)據(jù),忽略之前的數(shù)據(jù)項(xiàng)咧最。

原理圖:

SkipWhile

skipWhile操作符捂人,與takeWhile相反,當(dāng)Observable發(fā)射的數(shù)據(jù)不滿足條件時(shí)才開始發(fā)射數(shù)據(jù)矢沿,忽略之前的數(shù)據(jù)項(xiàng)滥搭。

原理圖:

Debounce

debounce操作符有兩種類型的入?yún)ⅰ?/p>

1.debounce(long, TimeUnit)
過濾由Observable發(fā)射的速率過快的數(shù)據(jù),起到限流的作用捣鲸。第一個(gè)參數(shù)為限流時(shí)間瑟匆,第二個(gè)參數(shù)為時(shí)間單位。

Observable.create(new Observable.OnSubscribe<Integer>() {
    @Override
    public void call(Subscriber<? super Integer> subscriber) {
        try {
            for (int i = 1; i < 10; i++) {
                subscriber.onNext(i);
                Thread.sleep(i * 100); //分別延時(shí)100栽惶,200愁溜,300疾嗅,400,500......900ms發(fā)射數(shù)據(jù)
            }
            subscriber.onCompleted();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}).subscribeOn(Schedulers.newThread())
        .debounce(400, TimeUnit.MILLISECONDS)
        .subscribe(new Observer<Integer>() {
            @Override
            public void onCompleted() {
                Log.e("rx_test", "debounce:" + "onCompleted");
            }
            
            @Override
            public void onError(Throwable e) {
            }
            
            @Override
            public void onNext(Integer integer) {
                Log.e("rx_test", "debounce:" + integer);
            }
        });

輸出結(jié)果:

debounce:5
debounce:6
debounce:7
debounce:8
debounce:9
debounce:onCompleted

由輸出結(jié)果可以看出由于設(shè)定限流時(shí)間為500ms冕象,所以1-4并沒有被發(fā)射而是被過濾了代承。

注意:如果源Observable產(chǎn)生的最后一個(gè)結(jié)果在限流時(shí)間內(nèi)內(nèi)調(diào)用了onCompleted,那么通過debounce操作符也會(huì)把這個(gè)結(jié)果提交給訂閱者渐扮。

原理圖:


2.debounce(Func1)
根據(jù)Func1的call方法中的函數(shù)來過濾次泽。Func1中的中的call方法返回了一個(gè)臨時(shí)的Observable,如果原始的Observable在發(fā)射一個(gè)新的數(shù)據(jù)時(shí)席爽,上一個(gè)數(shù)據(jù)根據(jù)Func1的call方法生成的臨時(shí)Observable還沒結(jié)束意荤,那么上一個(gè)數(shù)據(jù)就會(huì)被過濾掉。

原理圖:

Distinct

1.distinct()
只允許還沒有發(fā)射過的數(shù)據(jù)通過只锻,達(dá)到去除序列中重復(fù)項(xiàng)的作用玖像。

//去除重復(fù)數(shù)字
Observable.just(1, 2, 2, 3, 4, 5, 6, 6, 6, 7)
        .distinct()
        .subscribe(new Action1<Integer>() {
            @Override
            public void call(Integer integer) {
                Log.e("rx_test", "distinct:去重:" + integer);
            }
        });

輸出結(jié)果:

distinct:去重:1
distinct:去重:2
distinct:去重:3
distinct:去重:4
distinct:去重:5
distinct:去重:6
distinct:去重:7

由輸出結(jié)果可見有重復(fù)的2和6都被過濾了。

原理圖:


2.distinct(Func1)
根據(jù)Func1中的call方法進(jìn)行去重齐饮,call方法會(huì)根據(jù)Observable發(fā)射的值生成一個(gè)Key捐寥,然后比較這個(gè)key來判斷兩個(gè)數(shù)據(jù)是否相同,如果判定為重復(fù)則會(huì)和distinct()一樣過濾掉重復(fù)的數(shù)據(jù)項(xiàng)祖驱。

//根據(jù)某屬性去重握恳,去除各小區(qū)大小相同的房源
Observable.from(communities)
        .flatMap(new Func1<Community, Observable<House>>() {
            @Override
            public Observable<House> call(Community community) {
                return Observable.from(community.getHouses());
            }
        })
        .distinct(new Func1<House, Float>() {
            @Override
            public Float call(House house) {
                return house.getSize();
            }
        })
        .subscribe(new Action1<House>() {
            @Override
            public void call(House house) {
                Log.e("rx_test", "distinct(Func1):去重:" + house.getCommunityName() + "小區(qū),大修嗥А:" + house.getSize());
            }
        });

輸出結(jié)果:

distinct(Func1):去重:東方花園小區(qū)乡洼,大小:105.6
distinct(Func1):去重:東方花園小區(qū)匕坯,大惺恰:144.8
distinct(Func1):去重:馬德里春天小區(qū),大懈鹁:88.6
distinct(Func1):去重:馬德里春天小區(qū)锹雏,大小:123.4
distinct(Func1):去重:帝豪家園小區(qū)术奖,大薪缸瘛:188.7
distinct(Func1):去重:帝豪家園小區(qū),大胁杉恰:56.4

DistinctUntilChanged

1.distinctUntilChanged()
通過當(dāng)前數(shù)據(jù)項(xiàng)與前一項(xiàng)是否相同來進(jìn)行去重佣耐。

//向前去重復(fù)數(shù)據(jù)
Observable.just(1, 2, 2, 3, 4, 2, 3, 5, 5)
        .distinctUntilChanged()
        .subscribe(new Action1<Integer>() {
            @Override
            public void call(Integer integer) {
                Log.e("rx_test", "distinctUntilChanged:向前去重:" + integer);
            }
        });

輸出結(jié)果:

distinctUntilChanged:向前去重:1
distinctUntilChanged:向前去重:2
distinctUntilChanged:向前去重:3
distinctUntilChanged:向前去重:4
distinctUntilChanged:向前去重:2
distinctUntilChanged:向前去重:3
distinctUntilChanged:向前去重:5

原理圖:


2.distinctUntilChanged(Func1)
與distinct(Func1)類似,根據(jù)Func1中call方法產(chǎn)生一個(gè)key來判斷相鄰兩個(gè)數(shù)據(jù)項(xiàng)是否相同挺庞。

//根據(jù)某屬性向前去重晰赞,去除各小區(qū)名相同的房源
Observable.from(communities)
        .flatMap(new Func1<Community, Observable<House>>() {
            @Override
            public Observable<House> call(Community community) {
                return Observable.from(community.getHouses())
                .distinctUntilChanged(new Func1<House, String>() {
                    @Override
                    public String call(House house) {
                        return house.getCommunityName();
                    }
                });
            }
        })
        .subscribe(new Action1<House>() {
            @Override
            public void call(House house) {
                Log.e("rx_test", "distinctUntilChanged(Func1):向前去重:" + house.getCommunityName() + "小區(qū),大小:" + house.getSize());
            }
        });

輸出結(jié)果:

distinctUntilChanged(Func1):向前去重:東方花園小區(qū)掖鱼,大腥蛔摺:105.6
distinctUntilChanged(Func1):向前去重:馬德里春天小區(qū),大邢返病:88.6
distinctUntilChanged(Func1):向前去重:帝豪家園小區(qū)郭怪,大兄窠贰:188.7

ElementAt

elementAt(int index)操作符意乓,獲取觀測序列中第index項(xiàng)索引赏迟,并作為唯一數(shù)據(jù)發(fā)射給觀察者,index索引從0開始妥凳。

Observable.from(communities)
        .elementAt(1)
        .subscribe(new Action1<Community>() {
            @Override
            public void call(Community community) {
                Log.e("rx_test", "elementAt:第二個(gè)小區(qū):" + community.getCommunityName());
            }
        });

輸出結(jié)果:

elementAt:第二個(gè)小區(qū):馬德里春天

原理圖:


First

1.first()
只發(fā)射觀測序列中的第一個(gè)數(shù)據(jù)項(xiàng)竟贯。

Observable.from(communities)
        .first()
        .subscribe(new Action1<Community>() {
            @Override
            public void call(Community community) {
                Log.e("rx_test", "first:" + community.getCommunityName());
            }
        });

輸出結(jié)果:

first:東方花園

原理圖:


2.first(Func1)
根據(jù)Func1中call方法的條件,發(fā)射符合條件的第一個(gè)數(shù)據(jù)項(xiàng)逝钥。

//過濾出第一個(gè)小區(qū)名為馬德里春天的小區(qū)
Observable.from(communities)
        .first(new Func1<Community, Boolean>() {
            @Override
            public Boolean call(Community community) {
                return "馬德里春天".equals(community.getCommunityName());
            }
        })
        .subscribe(new Action1<Community>() {
            @Override
            public void call(Community community) {
                Log.e("rx_test", "first(Func1):" + community.getCommunityName());
            }
        });

輸出結(jié)果:

first(Func1):馬德里春天

Last

1.last()
只發(fā)射觀測序列中的最后一個(gè)數(shù)據(jù)項(xiàng)屑那。

//發(fā)送最后一個(gè)數(shù)據(jù)項(xiàng)
Observable.from(communities)
        .last()
        .subscribe(new Action1<Community>() {
            @Override
            public void call(Community community) {
                Log.e("rx_test", "last:" + community.getCommunityName());
            }
        });

輸出結(jié)果:

last:帝豪家園

原理圖:


2.last(Func1)
根據(jù)Func1中call方法的條件,發(fā)射符合條件的最后一個(gè)數(shù)據(jù)項(xiàng)艘款。

//發(fā)送符合條件的最后一個(gè)數(shù)據(jù)項(xiàng):過濾最后一個(gè)小區(qū)名為馬德里春天的房源
Observable.from(communities)
        .flatMap(new Func1<Community, Observable<House>>() {
            @Override
            public Observable<House> call(Community community) {
                return Observable.from(community.getHouses());
            }
        })
        .last(new Func1<House, Boolean>() {
            @Override
            public Boolean call(House house) {
                return "馬德里春天".equals(house.getCommunityName());
            }
        })
        .subscribe(new Action1<House>() {
            @Override
            public void call(House house) {
                Log.e("rx_test", "last:" + house.getCommunityName() + "小區(qū)持际,大小:" + house.getSize());
            }
        });

輸出結(jié)果:

last:馬德里春天小區(qū)哗咆,大兄┯:88.6

總結(jié)

到此,本篇關(guān)于RxJava的常用過濾類操作符就講解完畢了晌柬,下一篇我們將一起研究RxJava的四類操作符中的組合操作符都有哪些以及如何使用姥份。

技術(shù)渣一枚,有寫的不對的地方歡迎大神們留言指正空繁,有什么疑惑或者建議也可以在我Github上RxJavaDemo項(xiàng)目Issues中提出殿衰,我會(huì)及時(shí)回復(fù)。

附上RxJavaDemo的地址:
RxJavaDemo

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末盛泡,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子娱颊,更是在濱河造成了極大的恐慌傲诵,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,123評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件箱硕,死亡現(xiàn)場離奇詭異拴竹,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)剧罩,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,031評論 2 384
  • 文/潘曉璐 我一進(jìn)店門栓拜,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事幕与√羰疲” “怎么了?”我有些...
    開封第一講書人閱讀 156,723評論 0 345
  • 文/不壞的土叔 我叫張陵啦鸣,是天一觀的道長潮饱。 經(jīng)常有香客問我,道長诫给,這世上最難降的妖魔是什么香拉? 我笑而不...
    開封第一講書人閱讀 56,357評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮中狂,結(jié)果婚禮上凫碌,老公的妹妹穿的比我還像新娘。我一直安慰自己胃榕,他們只是感情好证鸥,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,412評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著勤晚,像睡著了一般枉层。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上赐写,一...
    開封第一講書人閱讀 49,760評論 1 289
  • 那天鸟蜡,我揣著相機(jī)與錄音,去河邊找鬼挺邀。 笑死揉忘,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的端铛。 我是一名探鬼主播泣矛,決...
    沈念sama閱讀 38,904評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼禾蚕!你這毒婦竟也來了您朽?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,672評論 0 266
  • 序言:老撾萬榮一對情侶失蹤换淆,失蹤者是張志新(化名)和其女友劉穎哗总,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體倍试,經(jīng)...
    沈念sama閱讀 44,118評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡讯屈,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,456評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了县习。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片涮母。...
    茶點(diǎn)故事閱讀 38,599評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡谆趾,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出叛本,到底是詐尸還是另有隱情沪蓬,我是刑警寧澤,帶...
    沈念sama閱讀 34,264評論 4 328
  • 正文 年R本政府宣布炮赦,位于F島的核電站怜跑,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏吠勘。R本人自食惡果不足惜性芬,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,857評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望剧防。 院中可真熱鬧植锉,春花似錦、人聲如沸峭拘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,731評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽鸡挠。三九已至辉饱,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間拣展,已是汗流浹背彭沼。 一陣腳步聲響...
    開封第一講書人閱讀 31,956評論 1 264
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留备埃,地道東北人姓惑。 一個(gè)月前我還...
    沈念sama閱讀 46,286評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像按脚,于是被迫代替她去往敵國和親于毙。 傳聞我的和親對象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,465評論 2 348

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

  • 本篇文章介主要紹RxJava中操作符是以函數(shù)作為基本單位辅搬,與響應(yīng)式編程作為結(jié)合使用的唯沮,對什么是操作、操作符都有哪些...
    嘎啦果安卓獸閱讀 2,844評論 0 10
  • 前言 上一篇文章我們學(xué)習(xí)了過濾類操作符伞辛,本篇我們將一起來學(xué)習(xí)RxJava組合類操作符烂翰。組合操作符主要是用來同時(shí)處理...
    SherlockXu8013閱讀 931評論 0 3
  • 創(chuàng)建操作 用于創(chuàng)建Observable的操作符Create通過調(diào)用觀察者的方法從頭創(chuàng)建一個(gè)ObservableEm...
    rkua閱讀 1,814評論 0 1
  • 作者: maplejaw本篇只解析標(biāo)準(zhǔn)包中的操作符。對于擴(kuò)展包蚤氏,由于使用率較低,如有需求踊兜,請讀者自行查閱文檔竿滨。 創(chuàng)...
    maplejaw_閱讀 45,623評論 8 93
  • 注:只包含標(biāo)準(zhǔn)包中的操作符,用于個(gè)人學(xué)習(xí)及備忘參考博客:http://blog.csdn.net/maplejaw...
    小白要超神閱讀 2,186評論 2 8