RxJava2.0 操作符(1)—— Create 創(chuàng)建操作

RxJava2.0 操作符(1)—— Create 創(chuàng)建操作

Create 創(chuàng)建類(lèi)操作符

Create — 使用一個(gè)函數(shù)從頭創(chuàng)建一個(gè) Observable。
Defer — 只有當(dāng)訂閱者訂閱才創(chuàng)建 Observable疆前;為每個(gè)訂閱創(chuàng)建一個(gè)新的 Observable寒跳。
Empty — 創(chuàng)建一個(gè)什么都不做直接通知完成的 Observable。
Error — 創(chuàng)建一個(gè)什么都不做直接通知錯(cuò)誤的 Observable竹椒。
From — 將一個(gè) Iterable, 一個(gè) Future, 或者一個(gè)數(shù)組轉(zhuǎn)換成一個(gè) Observable童太。
Interval — 創(chuàng)建一個(gè)按照給定的時(shí)間間隔發(fā)射整數(shù)序列的 Observable。
Just — 將一個(gè)或多個(gè)對(duì)象轉(zhuǎn)換成發(fā)射這個(gè)或這些對(duì)象的一個(gè) Observable胸完。
Range — 創(chuàng)建一個(gè)發(fā)射指定范圍的整數(shù)序列的 Observable书释。
Repeat — 創(chuàng)建一個(gè)重復(fù)發(fā)射指定數(shù)據(jù)或數(shù)據(jù)序列的 Observable。
RepeatWhen — 創(chuàng)建一個(gè)重復(fù)發(fā)射指定數(shù)據(jù)或數(shù)據(jù)序列的 Observable赊窥,它依賴(lài)于另一個(gè) Observable 發(fā)射的數(shù)據(jù)爆惧。
Never — 創(chuàng)建一個(gè)不發(fā)射任何數(shù)據(jù)的 Observable。
Timer — 創(chuàng)建一個(gè)在給定的延時(shí)之后發(fā)射單個(gè)數(shù)據(jù)的 Observable锨能。

1.1 Create

使用一個(gè)函數(shù)從頭創(chuàng)建一個(gè) Observable扯再。



示例代碼:

 Observable.create(new ObservableOnSubscribe<String>() {
    @Override
    public void subscribe(@NonNull ObservableEmitter<String> emitter) throws Exception {
        for (int i = 1; i < 5; i++) {
            emitter.onNext(i+"");
        }
        emitter.onComplete();
    }
}).subscribe(new Observer<String>() {
    @Override
    public void onSubscribe(@NonNull Disposable d) {

    }

    @Override
    public void onNext(@NonNull String s) {
        System.out.println("Next: " + s);
    }

    @Override
    public void onError(@NonNull Throwable error) {
        System.err.println("Error: " + error.getMessage());
    }

    @Override
    public void onComplete() {
        System.out.println("Sequence complete.");
    }

輸出:

Next: 1
Next: 2
Next: 3
Next: 4
Sequence complete.

1.2 defer

只有當(dāng)訂閱者訂閱才創(chuàng)建 Observable;才會(huì)為每個(gè)訂閱創(chuàng)建一個(gè)新的 Observable址遇。



示例代碼:

Observable<String> observable = Observable.defer(new Callable<ObservableSource<? extends String>>() {
        @Override
        public ObservableSource<? extends String> call() throws Exception {
            return Observable.just("String");
        }
    });
    observable.subscribe(new Consumer<String>() {
        @Override
        public void accept(@NonNull String s) throws Exception {
            System.out.println(s);
        }
    });

輸出:

String

1.3 Empty

創(chuàng)建一個(gè)什么都不做直接通知完成的 Observable熄阻。



示例代碼:

 Observable.create(new ObservableOnSubscribe<String>() {
    @Override
    public void subscribe(@NonNull ObservableEmitter<String> emitter) throws Exception {
        for (int i = 1; i < 5; i++) {
            emitter.onNext(i+"");
        }
        emitter.onComplete();
    }
}).subscribe(new Observer<String>() {
    @Override
    public void onSubscribe(@NonNull Disposable d) {

    }

    @Override
    public void onNext(@NonNull String s) {
        System.out.println("Next: " + s);
    }

    @Override
    public void onError(@NonNull Throwable error) {
        System.err.println("Error: " + error.getMessage());
    }

    @Override
    public void onComplete() {
        System.out.println("Sequence complete.");
    }
});

輸出結(jié)果:

onComplete

1.3 Error

創(chuàng)建一個(gè)什么都不做直接通知錯(cuò)誤的 Observable。



示例代碼:

 Observable<String> observable = Observable.error(new Callable<Throwable>() {
    @Override
    public Throwable call() throws Exception {
        return new NullPointerException();
    }
});
observable.subscribe(new Observer<String>() {
    @Override
    public void onSubscribe(@NonNull Disposable d) {

    }

    @Override
    public void onNext(@NonNull String s) {
        System.out.println("Next: " + s);
    }

    @Override
    public void onError(@NonNull Throwable error) {
        System.err.println("Error: " + error.getMessage());
    }

    @Override
    public void onComplete() {
        System.out.println("onComplete");
    }
});

輸出結(jié)果:

Error: null

1.4 From

將一個(gè) Iterable, 一個(gè) Future, 或者一個(gè)數(shù)組轉(zhuǎn)換成一個(gè) Observable倔约。



示例代碼1:

//1.遍歷集合
List<String> items = new ArrayList<>();
for (int i = 0; i < 3; i++) {
    items.add(i + "");
}
Observable<String> observable = Observable.fromIterable(items);
//Observable<String> observable = Observable.fromArray(new String[]{"Hello", "world"});
observable.subscribe(new Consumer<String>() {
    @Override
    public void accept(@NonNull String s) throws Exception {
         System.out.println("result:" + s);
    }
});

輸出結(jié)果:

result:0
result:1
result:2

1.5 Interval

創(chuàng)建一個(gè)按照給定的時(shí)間間隔發(fā)射整數(shù)序列的 Observable秃殉。



示例代碼:

final CompositeDisposable disposable = new CompositeDisposable();
disposable.add(Observable.interval(1, TimeUnit.SECONDS).subscribeWith(new DisposableObserver<Long>() {
    @Override
    public void onNext(@NonNull Long aLong) {
        System.out.println("Next: " + aLong);
    }

    @Override
    public void onError(@NonNull Throwable error) {
        System.err.println("Error: " + error.getMessage());
    }

    @Override
    public void onComplete() {
        System.out.println("onComplete");
    }
}));
//5秒后取消訂閱
try {
    Thread.sleep(4000);
    //取消訂閱
    disposable.dispose();
} catch (InterruptedException e) {
    e.printStackTrace();
}

輸出結(jié)果:

Next: 0
Next: 1
Next: 2
Next: 3

1.6 Just

將一個(gè)或多個(gè)對(duì)象轉(zhuǎn)換成發(fā)射這個(gè)或這些對(duì)象的一個(gè) Observable。



示例代碼:

Observable.just(1, 2, 3).subscribe(new Observer<Integer>() {
    @Override
    public void onSubscribe(@NonNull Disposable d) {

    }

    @Override
    public void onNext(@NonNull Integer s) {
        System.out.println("Next: " + s);
    }

    @Override
    public void onError(@NonNull Throwable error) {
        System.err.println("Error: " + error.getMessage());
    }

    @Override
    public void onComplete() {
        System.out.println("onComplete");
    }
});

輸出結(jié)果:

Next: 1
Next: 2
Next: 3
onComplete

1.7 Range

創(chuàng)建一個(gè)發(fā)射指定范圍的整數(shù)序列的 Observable浸剩。
RxJava 將這個(gè)操作符實(shí)現(xiàn)為 range 函數(shù)钾军,它接受兩個(gè)參數(shù),一個(gè)是范圍的起始值绢要,一個(gè)是范圍的數(shù)據(jù)的數(shù)目吏恭。如果你將第二個(gè)參數(shù)設(shè)為 0,將導(dǎo)致 Observable 不發(fā)射任何數(shù)據(jù)(如果設(shè)置為負(fù)數(shù)袖扛,會(huì)拋異常)



示例代碼:

// 依次發(fā)射 10砸泛、11十籍、12
Observable.range(10, 2).subscribe(new Observer<Integer>() {
    @Override
    public void onSubscribe(@NonNull Disposable d) {

    }

    @Override
    public void onNext(@NonNull Integer s) {
        System.out.println("Next: " + s);
    }

    @Override
    public void onError(@NonNull Throwable error) {
        System.err.println("Error: " + error.getMessage());
    }

    @Override
    public void onComplete() {
        System.out.println("onComplete");
    }
});

輸出結(jié)果:

Next: 10
Next: 11
Next: 12
onComplete

1.8 Repeat

創(chuàng)建一個(gè)重復(fù)發(fā)射指定數(shù)據(jù)或數(shù)據(jù)序列的 Observable。



示例代碼:

//重復(fù)三次唇礁,repeat()就是無(wú)限次
Observable.just("hello", "world").repeat(3).subscribe(new Observer<Object>() {
    @Override
    public void onSubscribe(@NonNull Disposable d) {

    }

    @Override
    public void onNext(@NonNull Object o) {
        System.out.println("onNext:" + o.toString());
    }

    @Override
    public void onError(@NonNull Throwable error) {
        System.err.println("Error: " + error.getMessage());
    }

    @Override
    public void onComplete() {
        System.out.println("onComplete");
    }
});

輸出結(jié)果:

onNext:hello
onNext:world
onNext:hello
onNext:world
onNext:hello
onNext:world
onComplete

1.9 RepeatWhen

創(chuàng)建一個(gè)重復(fù)發(fā)射指定數(shù)據(jù)或數(shù)據(jù)序列的 Observable勾栗,它依賴(lài)于另一個(gè) Observable 發(fā)射的數(shù)據(jù)。

1.10 Never

創(chuàng)建一個(gè)不發(fā)射任何數(shù)據(jù)的 Observable盏筐。



(ps:不太懂有何意義)

1.11 Timer

創(chuàng)建一個(gè)在給定的延時(shí)之后發(fā)射單個(gè)數(shù)據(jù)的 Observable围俘。
在 RxJava 1.0.0 及其之后的版本,官方已不再提倡使用 timer() 操作符琢融,因?yàn)?interval() 具有同樣的功能界牡。



示例代碼:

Observable.timer(1, TimeUnit.SECONDS)
    .subscribe(new Consumer<Long>() {
        @Override
        public void accept(@NonNull Long aLong) throws Exception {
            System.out.println("result:" + aLong);
        }
    });

輸出結(jié)果:

result:0
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市漾抬,隨后出現(xiàn)的幾起案子宿亡,更是在濱河造成了極大的恐慌,老刑警劉巖纳令,帶你破解...
    沈念sama閱讀 218,386評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件挽荠,死亡現(xiàn)場(chǎng)離奇詭異喘先,居然都是意外死亡内狗,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門(mén)格嗅,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)捏雌,“玉大人跃赚,你說(shuō)我怎么就攤上這事⌒允” “怎么了纬傲?”我有些...
    開(kāi)封第一講書(shū)人閱讀 164,704評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀(guān)的道長(zhǎng)窘奏。 經(jīng)常有香客問(wèn)我嘹锁,道長(zhǎng)葫录,這世上最難降的妖魔是什么着裹? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,702評(píng)論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮米同,結(jié)果婚禮上骇扇,老公的妹妹穿的比我還像新娘。我一直安慰自己面粮,他們只是感情好少孝,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,716評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著熬苍,像睡著了一般稍走。 火紅的嫁衣襯著肌膚如雪袁翁。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,573評(píng)論 1 305
  • 那天婿脸,我揣著相機(jī)與錄音粱胜,去河邊找鬼。 笑死狐树,一個(gè)胖子當(dāng)著我的面吹牛焙压,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播抑钟,決...
    沈念sama閱讀 40,314評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼涯曲,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了在塔?” 一聲冷哼從身側(cè)響起幻件,我...
    開(kāi)封第一講書(shū)人閱讀 39,230評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎蛔溃,沒(méi)想到半個(gè)月后傲武,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,680評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡城榛,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,873評(píng)論 3 336
  • 正文 我和宋清朗相戀三年揪利,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片狠持。...
    茶點(diǎn)故事閱讀 39,991評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡疟位,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出喘垂,到底是詐尸還是另有隱情甜刻,我是刑警寧澤,帶...
    沈念sama閱讀 35,706評(píng)論 5 346
  • 正文 年R本政府宣布正勒,位于F島的核電站得院,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏章贞。R本人自食惡果不足惜祥绞,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,329評(píng)論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望鸭限。 院中可真熱鬧蜕径,春花似錦、人聲如沸败京。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,910評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)赡麦。三九已至朴皆,卻和暖如春帕识,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背遂铡。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,038評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工渡冻, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人忧便。 一個(gè)月前我還...
    沈念sama閱讀 48,158評(píng)論 3 370
  • 正文 我出身青樓族吻,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親珠增。 傳聞我的和親對(duì)象是個(gè)殘疾皇子超歌,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,941評(píng)論 2 355

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

  • 本篇文章介主要紹RxJava中操作符是以函數(shù)作為基本單位,與響應(yīng)式編程作為結(jié)合使用的蒂教,對(duì)什么是操作巍举、操作符都有哪些...
    嘎啦果安卓獸閱讀 2,860評(píng)論 0 10
  • 這個(gè)頁(yè)面展示的操作符可用于組合多個(gè) Observables。 Delay — 延時(shí)發(fā)射 Observable 的結(jié)...
    DoubleThunder閱讀 3,026評(píng)論 0 3
  • 注:只包含標(biāo)準(zhǔn)包中的操作符凝垛,用于個(gè)人學(xué)習(xí)及備忘參考博客:http://blog.csdn.net/maplejaw...
    小白要超神閱讀 2,195評(píng)論 2 8
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理懊悯,服務(wù)發(fā)現(xiàn),斷路器梦皮,智...
    卡卡羅2017閱讀 134,657評(píng)論 18 139
  • 作者: maplejaw本篇只解析標(biāo)準(zhǔn)包中的操作符炭分。對(duì)于擴(kuò)展包,由于使用率較低剑肯,如有需求捧毛,請(qǐng)讀者自行查閱文檔。 創(chuàng)...
    maplejaw_閱讀 45,666評(píng)論 8 93