RxJava進階三(過濾類操作符)

RxJava進階

RxJava進階一(創(chuàng)建類操作符)
RxJava進階二(轉(zhuǎn)換類操作符)
RxJava進階三(過濾類操作符)
RxJava進階四(組合類操作符)


前言

上篇文章我們了解了RXJava的轉(zhuǎn)換類操作符,本篇文章帶著大家熟悉一下RxJava的過濾類操作符,本系列文章僅是帶大家認識一下這些操作符的用法,并沒有對操作符進行多種形態(tài)的使用,具體的還需要大家在使用時注意~

操作符總覽

Debounce、Distinct、ElementAt、Filter、First、IgnoreElements、Last、Sample、Skip、SkipLast、Take、TakeLast...

具體使用介紹

Debounce

debounce操作符在源Observable產(chǎn)品一個結(jié)果時開始計時,如果在規(guī)定的間隔時間內(nèi)沒有別的結(jié)果產(chǎn)生或者在此期間調(diào)用了onCompleted,則發(fā)射數(shù)據(jù),否則忽略發(fā)射。

代碼示例:

        Observable
                .create((Observable.OnSubscribe<Integer>) subscriber -> {
                    try {
                        //產(chǎn)生結(jié)果的間隔時間分別為100、200、300...900毫秒
                        for (int i = 1; i < 10; i++) {
                            subscriber.onNext(i);
                            Thread.sleep(i * 100);
                        }
                        subscriber.onCompleted();
                    } catch (Exception e) {
                        subscriber.onError(e);
                    }
                })
                .debounce(400, TimeUnit.MILLISECONDS)
                .subscribe(new Action1<Integer>() {
                    @Override
                    public void call(Integer integer) {
                        System.out.println(integer);
                    }
                });

運行結(jié)果:

debounce示例

Distinct

去重,過濾掉重復數(shù)據(jù)項~

        Observable
                .just(1, 1, 2, 2, 3)
                .distinct()
                .subscribe(new Action1<Integer>() {
                    @Override
                    public void call(Integer integer) {
                        System.out.println(integer);
                    }
                });

運行結(jié)果:

distinct示例

ElementAt##

取值,取特定位置的數(shù)據(jù)項,索引是從0開始的~

代碼示例:

        Observable
                .just(100, 101, 102, 103, 104)
                .elementAt(4)
                .subscribe(new Action1<Integer>() {
                    @Override
                    public void call(Integer integer) {
                        System.out.println("onNext -->" + integer);
                    }
                });

運行結(jié)果:

elementAt示例

Filter##

對發(fā)射的數(shù)據(jù)進行過濾,只發(fā)射符合條件的數(shù)據(jù)~

代碼示例:

        Observable
                .just(100, 101, 102, 103, 104)
                .filter(new Func1<Integer, Boolean>() {
                    @Override
                    public Boolean call(Integer integer) {
                        return integer >= 102;
                    }
                })
                .subscribe(new Action1<Integer>() {
                    @Override
                    public void call(Integer integer) {
                        System.out.println("onNext -->" + integer);
                    }
                });

運行結(jié)果:

filter示例

First##

首項,只發(fā)射首項或滿足條件的首項數(shù)據(jù)~

示例代碼:

        Observable
                .just(100, 101, 102, 103, 104)
                .first(new Func1<Integer, Boolean>() {
                    @Override
                    public Boolean call(Integer integer) {
                        return integer >= 102;
                    }
                })
                .subscribe(new Action1<Integer>() {
                    @Override
                    public void call(Integer integer) {
                        System.out.println("onNext -->" + integer);
                    }
                });

運行結(jié)果:

first示例

Last##

末項,只發(fā)射末項或滿足條件的末項數(shù)據(jù)~

示例代碼:

        Observable
                .just(100, 101, 102, 103, 104)
                .last(new Func1<Integer, Boolean>() {
                    @Override
                    public Boolean call(Integer integer) {
                        return integer <= 102;
                    }
                })
                .subscribe(new Action1<Integer>() {
                    @Override
                    public void call(Integer integer) {
                        System.out.println("onNext -->" + integer);
                    }
                });

運行結(jié)果:

last示例

IgnoreElements##

忽略所有數(shù)據(jù),只保留終止通知(onError或onCompleted)~

示例代碼:

        //  ignoreElements
        Observable
                .just(100, 101, 102, 103, 104)
                .ignoreElements()
                .subscribe(new Subscriber<Integer>() {
                    @Override
                    public void onCompleted() {
                        System.out.println("onCompleted");
                    }

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

                    @Override
                    public void onNext(Integer integer) {
                        System.out.println("onNext -->" + integer);
                    }
                });

運行結(jié)果:

ignoreElements示例

Sample##

取樣,定期掃描源Observable產(chǎn)生的數(shù)據(jù),發(fā)射最新的數(shù)據(jù)~

示例代碼:

        Observable
                .interval(100, TimeUnit.MILLISECONDS)
                .sample(200, TimeUnit.MILLISECONDS)
                .subscribe(new Action1<Long>() {
                    @Override
                    public void call(Long aLong) {
                        System.out.println(aLong);
                    }
                });

運行結(jié)果:

截取的部分輸出結(jié)果,從輸出結(jié)果可以看出,每次發(fā)射的數(shù)據(jù)都是偶數(shù)~

sample示例

Skip##

跳過前面的n項數(shù)據(jù)不進行處理~

示例代碼:

        Observable
                .just(1, 2, 3, 4, 5)
                .skip(2)
                .subscribe(new Action1<Integer>() {
                    @Override
                    public void call(Integer integer) {
                        System.out.println("onNext -->" + integer);
                    }
                });

運行結(jié)果:

skip示例

SkipLast##

跳過后面的n項數(shù)據(jù)不進行處理~

示例代碼:

        Observable
                .just(1, 2, 3, 4, 5)
                .skipLast(2)
                .subscribe(new Action1<Integer>() {
                    @Override
                    public void call(Integer integer) {
                        System.out.println("onNext -->" + integer);
                    }
                });

運行結(jié)果:

skipLast示例

Take##

與skip用法相反,保留前面的n項數(shù)據(jù)進行發(fā)射,而忽略后面的結(jié)果~

示例代碼:

        Observable
                .just(1, 2, 3, 4, 5)
                .take(3)
                .subscribe(new Action1<Integer>() {
                    @Override
                    public void call(Integer integer) {
                        System.out.println("onNext -->" + integer);
                    }
                });

運行結(jié)果:

take示例

TakeLast##

與skipLast用法相反,只保留后面的n項數(shù)據(jù)進行發(fā)射,而忽略前面的結(jié)果~

示例代碼:

        Observable
                .just(1, 2, 3, 4, 5)
                .takeLast(3)
                .subscribe(new Action1<Integer>() {
                    @Override
                    public void call(Integer integer) {
                        System.out.println("onNext -->" + integer);
                    }
                });

運行結(jié)果:

takeLast示例

結(jié)語

過濾類操作符,就簡單介紹到這里,希望能夠?qū)ν瑢W有所幫助,謝謝~

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

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

  • 本篇文章介主要紹RxJava中操作符是以函數(shù)作為基本單位,與響應(yīng)式編程作為結(jié)合使用的,對什么是操作、操作符都有哪些...
    嘎啦果安卓獸閱讀 2,994評論 0 10
  • RxJava正在Android開發(fā)者中變的越來越流行。唯一的問題就是上手不容易,尤其是大部分人之前都是使用命令式編...
    劉啟敏閱讀 2,017評論 1 7
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,366評論 25 708
  • 創(chuàng)建操作 用于創(chuàng)建Observable的操作符Create通過調(diào)用觀察者的方法從頭創(chuàng)建一個ObservableEm...
    rkua閱讀 1,962評論 0 1
  • “初戀”相信我們都印象深刻,也許它轟轟烈烈,也許它淡若白水,也許它就是一次一個人的暗戀,不管初戀中的你經(jīng)歷過...
    郭曉啥閱讀 284評論 0 1

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