RxJava——基礎(chǔ)學(xué)習(xí)(五),變換操作符

學(xué)習(xí)資料

1. 變換操作符

作用:用于對(duì)Observable發(fā)射的數(shù)據(jù)進(jìn)行變換

1.1 Buffer緩沖

定期收集Observable的數(shù)據(jù)放進(jìn)一個(gè)數(shù)據(jù)包裹,然后發(fā)射這些數(shù)據(jù)包裹继薛,而不是一次發(fā)射一個(gè)值

注意:如果原來的Observable發(fā)射了一個(gè)onError通知,Buffer會(huì)立即傳遞這個(gè)通知,而不是首先發(fā)射緩存的數(shù)據(jù)定续,即使在這之前緩存中包含了原始Observable發(fā)射的數(shù)據(jù)


1.1.1 buffer(count)

將原始Observable產(chǎn)生的數(shù)據(jù)以List非重疊的形式緩存,一次最多緩存count個(gè)禾锤,然后產(chǎn)生的新的Observable一次性將List發(fā)送出去

    /**
     * buffer(3)
     * 緩存3個(gè)原始數(shù)據(jù)私股,存進(jìn)List
     */
      private static void bufferCount() {
        Observable
                .from(Stream.iterate(1, new UnaryOperator<Integer>() {
                    @Override
                    public Integer apply(Integer integer) {
                        return integer + 1;
                    }
                }).limit(30).collect(Collectors.toList()))
                .buffer(3)
                .subscribe(new Action1<List<Integer>>() {
                    @Override
                    public void call(List<Integer> integers) {
                           System.out.println(integers);
                    }
                });
    }

運(yùn)行結(jié)果:

[1, 2, 3]
[4, 5, 6]
[7, 8, 9]
[10, 11, 12]
[13, 14, 15]
[16, 17, 18]
[19, 20, 21]
[22, 23, 24]
[25, 26, 27]
[28, 29, 30]

1.1.2 buffer(count , skip)

從原始的Observable的第一項(xiàng)數(shù)據(jù)開始進(jìn)行緩存,發(fā)出了skip個(gè)數(shù)據(jù)后时肿,將著skip個(gè)數(shù)據(jù)看作一組庇茫,從當(dāng)前這組第一項(xiàng)數(shù)據(jù)開始,直到count個(gè)數(shù)據(jù)螃成,存進(jìn)List集合旦签,由新的Observable發(fā)出。根據(jù)count寸宏,skip大小宁炫,會(huì)出現(xiàn)重疊或者間隙

count < skip ,出現(xiàn)間隙:


private static void bufferSkip() {
       Observable
               .from(Stream.iterate(1, new UnaryOperator<Integer>() {
                   @Override
                   public Integer apply(Integer integer) {
                       return integer + 1;
                   }
               }).limit(30).collect(Collectors.toList()))
               //.buffer(3,2)//重疊
               .buffer(3,5)//間隙
               .subscribe(new Action1<List<Integer>>() {
                   @Override
                   public void call(List<Integer> integers) {
                       integers.forEach(new Consumer<Integer>() {
                           @Override
                           public void accept(Integer integer) {
                               System.out.print(integer + " ");
                           }
                       });

                   }
               });
 }

運(yùn)行結(jié)果:

1 2 3 6 7 8 11 12 13 16 17 18 21 22 23 26 27 28 

每當(dāng)收到5數(shù)據(jù)時(shí),這5個(gè)數(shù)據(jù)就是一組的氮凝,就從第一個(gè)開始羔巢,將緩存的3個(gè)數(shù)據(jù)存進(jìn)List,剩下2個(gè)就丟棄,這樣就導(dǎo)致產(chǎn)生間隙

count > skip 竿秆,出現(xiàn)重疊:

...
.buffer(3,2)
...

運(yùn)行結(jié)果:

1 2 3 3 4 5 5 6 7 7 8 9 9 10 11 11 12 13 13 14 15 15 16 17 17 18 19 19 20 21 21 22 23 23 24 25 25 26 27 27 28 29 29 30 

每當(dāng)收到2個(gè)數(shù)據(jù)后启摄,這2個(gè)數(shù)據(jù)是一組,但由于是將緩存的3個(gè)數(shù)據(jù)存進(jìn)List幽钢,就將下一組數(shù)據(jù)補(bǔ)充進(jìn)來歉备,導(dǎo)致重疊


1.1.3 buffer(func0)

原始的Observable產(chǎn)生數(shù)據(jù)后,當(dāng)buffer(func0)訂閱了后匪燕,將收到的數(shù)據(jù)存進(jìn)List中蕾羊,Func0會(huì)返回一個(gè)Observable對(duì)象具有監(jiān)視作用,適當(dāng)條件下這個(gè)Observable發(fā)出一個(gè)通知時(shí)(感覺隨意發(fā)出一個(gè)數(shù)據(jù)就可以)帽驯,buffer就會(huì)將當(dāng)前存放緩存數(shù)據(jù)的List發(fā)出去

private static void bufferFunc() {
     Observable
         //在當(dāng)前線程龟再,每隔100毫秒產(chǎn)生一個(gè)整數(shù)
        .interval(0,100,TimeUnit.MILLISECONDS,Schedulers.immediate())
        //限制為30個(gè)
        .limit(30)
        //每隔500毫秒發(fā)一個(gè)整數(shù),發(fā)出的數(shù)據(jù)尼变,可以看作通知
        .buffer(new Func0<Observable<?>>() {
             @Override
             public Observable<?> call() {
                 return Observable.interval(500, TimeUnit.MILLISECONDS, Schedulers.newThread());
             }
        })
        //將List集合打印
       .subscribe(System.out::println);
}

運(yùn)行結(jié)果:

[0, 1, 2, 3, 4]
[5, 6, 7, 8, 9]
[10, 11, 12, 13, 14]
[15, 16, 17, 18, 19]
[20, 21, 22, 23, 24]
[25, 26, 27, 28, 29]

1.1.4 buffer(Observable,Func1)

  • buffer(bufferOpenings,?bufferClosingSelector)

原始Obseravble開始發(fā)送數(shù)據(jù)之后利凑,buffer會(huì)監(jiān)視bufferOpenings這個(gè)Observable,每當(dāng)bufferOpenings發(fā)送出一個(gè)數(shù)據(jù)后,會(huì)創(chuàng)建出一個(gè)新的List開始存放原始的Obseravble發(fā)出的數(shù)據(jù)享甸,相當(dāng)于Open標(biāo)記截碴。bufferOpenings發(fā)出的數(shù)據(jù)叫bufferClosingSelectorFunc1會(huì)接收到,當(dāng)bufferClosingSelector接收到這個(gè)信號(hào)后蛉威,根據(jù)需求做相應(yīng)的處理。Func1會(huì)返回一個(gè)新的Observable走哺,當(dāng)buffer監(jiān)測(cè)到這個(gè)新的Observable時(shí)蚯嫌,就會(huì)關(guān)閉List,然后將List發(fā)送出去

private static void bufferOpenClose() {
     Observable
            //在當(dāng)前線程 每隔100毫秒 從0開始 發(fā)出整數(shù)序列
           .interval(0, 100, TimeUnit.MILLISECONDS, Schedulers.immediate())
           .limit(30)
           //buffer(bufferOpenings,?bufferClosingSelector)
           //bufferOpenings丙躏,每隔500毫秒發(fā)出一個(gè)整數(shù)择示,打開信號(hào)
           //bufferClosingSelector,接到bufferOpenings發(fā)來的通知晒旅,延遲200毫秒后發(fā)出第一個(gè)關(guān)閉信號(hào)栅盲,之后每隔500毫秒發(fā)出一個(gè)整數(shù)進(jìn)行通知
           .buffer(Observable.interval(500, TimeUnit.MILLISECONDS, Schedulers.newThread()), new Func1<Long, Observable<?>>() {
                 @Override
                 public Observable<?> call(Long aLong) {
                     System.out.println(aLong);
                     //200毫秒后,發(fā)出一個(gè)整數(shù)0废恋,作用關(guān)閉信號(hào)
                    return Observable.timer(200,TimeUnit.MILLISECONDS,Schedulers.newThread());
                 }
           })
           .subscribe(System.out::println);
 }

運(yùn)行結(jié)果:

0
[5, 6]
1
[10, 11]
2
[15, 16]
3
[20, 21]
4
[25, 26]
案例示意圖

當(dāng)bufferOpenings發(fā)出第一個(gè)打開信號(hào)之后200毫秒那一時(shí)刻谈秫,bufferClosing會(huì)接到一個(gè)關(guān)閉關(guān)閉信號(hào),這200毫秒內(nèi)的數(shù)據(jù)項(xiàng)就會(huì)被存進(jìn)一個(gè)List集合內(nèi)鱼鼓,緊接著List遍被原始的Observable發(fā)送出去拟烫。第一次buffer便完成

bufferOpenings發(fā)出第一個(gè)信號(hào)500毫秒時(shí),發(fā)出第二個(gè)打開信號(hào)迄本,之后200毫秒那一時(shí)刻硕淑,bufferClosing會(huì)接到一個(gè)關(guān)閉關(guān)閉信號(hào),如此循環(huán),重復(fù)置媳,直到數(shù)據(jù)項(xiàng)沒有

估計(jì)也就只有我自己看得懂了


1.2 GroupBy分組

GroupBy將原始的Observable拆分成多個(gè)組于樟,每個(gè)組可以有一個(gè)自己的key,同一個(gè)key的數(shù)據(jù)由一個(gè)Obsvervable來發(fā)送

GroupBy返回的是Observable的一個(gè)特殊子類GroupedObservable拇囊,實(shí)現(xiàn)了GroupedObservable接口的對(duì)象有一個(gè)額外的方法getKey迂曲,根據(jù)拿到的key可以做對(duì)應(yīng)的操作

默認(rèn)不在任何特定的調(diào)度器上執(zhí)行

1.2.1 groupBy(Func1)

簡單使用:

    /**
     *將產(chǎn)生的數(shù)據(jù)中為偶數(shù)的輸出打印
     *
     */      
    private static void groupByFunc1() {
        Observable
                .interval(0, 100, TimeUnit.MILLISECONDS, Schedulers.immediate())
                .limit(10)
                //根據(jù)奇偶類型 返回不同的key 偶數(shù)為 "1"
                .groupBy(new Func1<Long, String>() {
                    @Override
                    public String call(Long aLong) {
                        return aLong % 2 == 0 ? "1" : "2";
                    }
                })
                //根據(jù)stringLongGroupedObservable的key類型 輸出
                .subscribe(new Action1<GroupedObservable<String, Long>>() {
                    @Override
                    public void call(GroupedObservable<String, Long> stringLongGroupedObservable) {
                        if (stringLongGroupedObservable.getKey().equals("1")) {
                            stringLongGroupedObservable.subscribe(new Action1<Long>() {
                                @Override
                                public void call(Long aLong) {
                                    System.out.print(aLong +",");
                                }
                            });
                        }
                    }
                });
    }

運(yùn)行結(jié)果:

0,2,4,6,8,

1.2.2 groupBy(Func1,Func1)

這個(gè)方法可以對(duì)原始數(shù)據(jù)進(jìn)行修改

簡單使用:

    /**
     * 修改產(chǎn)生的數(shù)據(jù)中結(jié)果大于4的值
     */
   private static void groupByMap() {
        Observable
                .interval(0, 100, TimeUnit.MILLISECONDS, Schedulers.immediate())
                .limit(10)
                .groupBy(new Func1<Long, String>() {
                             @Override
                             public String call(Long aLong) {
                                 return aLong % 2 == 0 ? "1" : "2";
                             }
                         }, new Func1<Long, String>() {
                             @Override
                             public String call(Long aLong) {
                                 return aLong > 4 ? (aLong + " -- > 哈") : (aLong + "");
                             }
                         }
//                        , new Func1<Action1<String>, Map<String, Object>>() {
//                            @Override
//                            public Map<String, Object> call(Action1<String> stringAction1) {
//                                return null;
//                            }
//                        }
                )
                .subscribe(new Action1<GroupedObservable<String, String>>() {
                    @Override
                    public void call(GroupedObservable<String, String> stringLongGroupedObservable) {
                        if (stringLongGroupedObservable.getKey().equals("1")) {
                            stringLongGroupedObservable.subscribe(new Action1<String>() {
                                @Override
                                public void call(String s) {
                                    System.out.print(s + ",");
                                }
                            });
                        }
                    }
                });
    }

運(yùn)行結(jié)果:

0,2,4,6 -- > 哈,8 -- > 哈,

方法中注釋掉的是3個(gè)參數(shù)的方法,不知道怎么用的寂拆,看源碼中的注釋也沒看明白奢米,先不管了


1.3 Window窗口

定期將來自原始Observable的數(shù)據(jù)分解為一個(gè)Observable窗口,發(fā)射這些窗口纠永,而不是每次發(fā)射一項(xiàng)數(shù)據(jù)

WindowBuffer有些類似鬓长,Buffer發(fā)送的是存放原始數(shù)據(jù)的List包裹,而Window發(fā)送的是Observable尝江,發(fā)送的每個(gè)Observable都包含原始的Observable的數(shù)據(jù)子集涉波,最后會(huì)發(fā)送一個(gè)onCompleted通知


1.3.1 window(Func0)

  • window(closingSelector)

window(Func0)會(huì)打開一個(gè)窗口,當(dāng)監(jiān)測(cè)到closingSelector返回了一個(gè)Obsvable對(duì)象后炭序,就會(huì)關(guān)閉當(dāng)前的窗口打開一個(gè)新的窗口啤覆,并將在當(dāng)前窗口打開期間的收集數(shù)據(jù)的Observable發(fā)送出去

發(fā)射一系列不重疊的窗口,這些窗口的數(shù)據(jù)集合與原始Observable發(fā)射的數(shù)據(jù)是一一對(duì)應(yīng)的惭聂。

簡單使用:

   private static void windowFunc0() {
        Observable
                .interval(0, 100, TimeUnit.MILLISECONDS, Schedulers.immediate())
                .limit(10)
                .window(new Func0<Observable<?>>() {
                    @Override
                    public Observable<?> call() {
                        return Observable.timer(500, TimeUnit.MILLISECONDS);
                    }
                })
                .subscribe(new Subscriber<Observable<Long>>() {
                    @Override
                    public void onCompleted() {
                        System.out.println(" onCompleted");
                    }

                    @Override
                    public void onError(Throwable e) {
                        System.out.println(e.getMessage());
                    }

                    @Override
                    public void onNext(Observable<Long> longObservable) {
                        longObservable.forEach(new Action1<Long>() {
                            @Override
                            public void call(Long aLong) {
                                System.out.print(aLong + " ,");
                            }
                        });
                    }
                });
    }

運(yùn)行結(jié)果:

0 ,1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9 , onCompleted

1.3,2 window(int)

  • window(count)

window打開一個(gè)窗口后窗声,每當(dāng)接收到count個(gè)數(shù)據(jù)后,就會(huì)關(guān)閉當(dāng)前的窗口辜纲,打開下一個(gè)窗口笨觅。如果從原始Observable收到了onErroronCompleted通知它也會(huì)關(guān)閉當(dāng)前窗口。

簡單使用:

    private static void windowCount() {
        Observable
                .interval(0, 100, TimeUnit.MILLISECONDS, Schedulers.immediate())
                .limit(10)
                .window(3)
                .subscribe(longObservable -> longObservable.forEach(System.out::print));
    }

運(yùn)行結(jié)果:

0123456789

在輸出結(jié)果時(shí)耕腾,是3個(gè)數(shù)據(jù)一起打印的见剩,012有一種一瞬間一起打出來,然后停頓一下扫俺,接著打印下面的一組


1.3.3 window(long,TimeUnit,Scheduler)

  • window(timespan, unit[, scheduler])

window打開一個(gè)窗口后苍苞,每當(dāng)?shù)搅似谙?code>timespan后,就會(huì)關(guān)閉當(dāng)前窗后狼纬,打開一個(gè)新的羹呵。時(shí)間單位是設(shè)置的unitscheduler指定調(diào)度器

簡單使用:

    private static void windowTimeSpan() {
        Observable
                .interval(0, 100, TimeUnit.MILLISECONDS, Schedulers.immediate())
                .limit(10)
                .window(300,TimeUnit.MILLISECONDS,Schedulers.newThread())
                .subscribe(new Action1<Observable<Long>>() {
                    @Override
                    public void call(Observable<Long> longObservable) {
                        longObservable.forEach((along)-> System.out.print(along +" ,"));
                    }
                });
    }

運(yùn)行結(jié)果還是0~9十個(gè)數(shù)字


1.4 Sacn掃描

連續(xù)地對(duì)數(shù)據(jù)序列的每一項(xiàng)應(yīng)用一個(gè)函數(shù)畸颅,然后連續(xù)發(fā)射結(jié)果,默認(rèn)不在任何特定的調(diào)度器上執(zhí)行

  • scan(Func2)

當(dāng)原始數(shù)據(jù)發(fā)送第一個(gè)數(shù)據(jù)后担巩,Scan操作符會(huì)將Func2中指定的函數(shù)應(yīng)用到第一個(gè)數(shù)據(jù)上,并將操作結(jié)果作為Scan自身第一個(gè)數(shù)據(jù)發(fā)送出去没炒。后續(xù)第二個(gè)數(shù)據(jù)作為Fun2.call()方法的第二個(gè)參數(shù)涛癌,而第一次函數(shù)操作的結(jié)果犯戏,作為第一個(gè)參數(shù),再次待用函數(shù)拳话。之后數(shù)據(jù)項(xiàng)都會(huì)重復(fù)先匪,前一次的結(jié)果作為call()第一個(gè)參數(shù),后一個(gè)數(shù)據(jù)項(xiàng)作為第2個(gè)參數(shù)弃衍,直到最后一個(gè)數(shù)據(jù)項(xiàng)呀非,最后會(huì)發(fā)送onCompleted通知。Scan操作符在某些情況下被叫做accumulator

簡單使用:

    /**
     * 前n項(xiàng)累加和
     */
    private static void scanSum() {
        Observable
                .range(1,10)
                .scan(new Func2<Integer, Integer, Integer>() {
                    @Override
                    public Integer call(Integer sum, Integer item) {
                        return sum + item;
                    }
                })
                .subscribe((n) -> System.out.print(n + " ,"));
    }

運(yùn)行結(jié)果:

1 ,3 ,6 ,10 ,15 ,21 ,28 ,36 ,45 ,55 ,

2. 最后

Map,FlatMap之前已經(jīng)學(xué)習(xí)了解過了镜盯,這里不想再次重復(fù)

這兩天《你的名字》上映了岸裙,聽說很不錯(cuò),約不到妹紙速缆,一會(huì)就在電腦看了降允,哈哈

本人很菜,有錯(cuò)誤請(qǐng)指出

共勉 :)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末艺糜,一起剝皮案震驚了整個(gè)濱河市剧董,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌破停,老刑警劉巖翅楼,帶你破解...
    沈念sama閱讀 217,907評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異真慢,居然都是意外死亡毅臊,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,987評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門黑界,熙熙樓的掌柜王于貴愁眉苦臉地迎上來褂微,“玉大人,你說我怎么就攤上這事园爷。” “怎么了式撼?”我有些...
    開封第一講書人閱讀 164,298評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵童社,是天一觀的道長。 經(jīng)常有香客問我著隆,道長扰楼,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,586評(píng)論 1 293
  • 正文 為了忘掉前任美浦,我火速辦了婚禮弦赖,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘浦辨。我一直安慰自己蹬竖,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,633評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著币厕,像睡著了一般列另。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上旦装,一...
    開封第一講書人閱讀 51,488評(píng)論 1 302
  • 那天页衙,我揣著相機(jī)與錄音,去河邊找鬼阴绢。 笑死店乐,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的呻袭。 我是一名探鬼主播眨八,決...
    沈念sama閱讀 40,275評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼棒妨!你這毒婦竟也來了踪古?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,176評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤券腔,失蹤者是張志新(化名)和其女友劉穎伏穆,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體纷纫,經(jīng)...
    沈念sama閱讀 45,619評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡枕扫,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,819評(píng)論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了辱魁。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片烟瞧。...
    茶點(diǎn)故事閱讀 39,932評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖染簇,靈堂內(nèi)的尸體忽然破棺而出参滴,到底是詐尸還是另有隱情,我是刑警寧澤锻弓,帶...
    沈念sama閱讀 35,655評(píng)論 5 346
  • 正文 年R本政府宣布勇边,位于F島的核電站竿滨,受9級(jí)特大地震影響族吻,放射性物質(zhì)發(fā)生泄漏辽旋。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,265評(píng)論 3 329
  • 文/蒙蒙 一杂拨、第九天 我趴在偏房一處隱蔽的房頂上張望专普。 院中可真熱鬧,春花似錦弹沽、人聲如沸檀夹。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,871評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽击胜。三九已至亏狰,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間偶摔,已是汗流浹背暇唾。 一陣腳步聲響...
    開封第一講書人閱讀 32,994評(píng)論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留辰斋,地道東北人策州。 一個(gè)月前我還...
    沈念sama閱讀 48,095評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像宫仗,于是被迫代替她去往敵國和親够挂。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,884評(píng)論 2 354

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

  • 注:只包含標(biāo)準(zhǔn)包中的操作符藕夫,用于個(gè)人學(xué)習(xí)及備忘參考博客:http://blog.csdn.net/maplejaw...
    小白要超神閱讀 2,195評(píng)論 2 8
  • 本篇文章介主要紹RxJava中操作符是以函數(shù)作為基本單位孽糖,與響應(yīng)式編程作為結(jié)合使用的,對(duì)什么是操作毅贮、操作符都有哪些...
    嘎啦果安卓獸閱讀 2,860評(píng)論 0 10
  • 作者: maplejaw本篇只解析標(biāo)準(zhǔn)包中的操作符办悟。對(duì)于擴(kuò)展包,由于使用率較低滩褥,如有需求病蛉,請(qǐng)讀者自行查閱文檔。 創(chuàng)...
    maplejaw_閱讀 45,664評(píng)論 8 93
  • 創(chuàng)建操作 用于創(chuàng)建Observable的操作符Create通過調(diào)用觀察者的方法從頭創(chuàng)建一個(gè)ObservableEm...
    rkua閱讀 1,827評(píng)論 0 1
  • 創(chuàng)建操作 以下操作符用于創(chuàng)建Observable瑰煎。create: 使用OnSubscribe從頭創(chuàng)建一個(gè)Obser...
    CHSmile閱讀 378評(píng)論 0 0