Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> RX操作符之過濾操作

RX操作符之過濾操作

編輯:關於Android編程

一、debounce

僅在過了一段指定的時間還沒發射數據時才發射一個數據,Debounce操作符會過濾掉發射速率過快的數據項。

注:這個操作符會會接著最後一項數據發射原始Observable的onCompleted通知,即使這個通知發生在你指定的時間窗口內(從最後一項數據的發射算起)。也就是說,onCompleted通知不會觸發限流。

 

 Integer[]items = {1,2,3,4,5,6,7,8};

        Observable myObservable = Observable.from(items)
                .debounce(2,TimeUnit.SECONDS);

        Subscriber mySubscriber =new Subscriber() {
            @Override
            public void onNext(Integer integer) {
                 System.out.println("onNext................."+integer);
            }

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

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

        myObservable.subscribe(mySubscriber);

運行結果:

 

\

 

 

二、filter

只發射符合條件的數據,Filter操作符使用你指定的一個謂詞函數測試數據項,只有通過測試的數據才會被發射。

 

 Integer[]items = {1,2,3,4,5,6,7,8};

        Observable myObservable = Observable.from(items)
                .filter(new Func1() {
                    @Override
                    public Boolean call(Integer integer) {
                        return integer < 7;
                    }
                });

        Subscriber mySubscriber =new Subscriber() {
            @Override
            public void onNext(Integer integer) {
                System.out.println("onNext................."+integer);
            }

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

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

        myObservable.subscribe(mySubscriber);

運行結果:

 

\

 

三、ofType

 

ofType只返回指定類型的數據

 

 Object [] items = {"dd",1,"ff",33,"fr",6,8,"zga",5};
        Observable myObservable = Observable.from(items)
                .ofType(Integer.class);
        Subscriber mySubscriber =new Subscriber() {
            @Override
            public void onNext(Integer integer) {
                System.out.println("onNext................."+integer);
            }

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

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

        myObservable.subscribe(mySubscriber);
運行結果:

 

\
 

 

四、takeLast

發射Observable發射的最後N項數據,TakeLast操作符修改原始Observable,你可以只發射Observable'發射的後N項數據,忽略前面的數據。

 

 Integer[]items = {1,2,3,4,5,6,7,8};
        Observable myObservable = Observable.from(items)
                .takeLast(5);
        Subscriber mySubscriber =new Subscriber() {
            @Override
            public void onNext(Integer integer) {
                System.out.println("onNext................."+integer);
            }

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

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

        myObservable.subscribe(mySubscriber);

運行結果:

 

\

五、last

 

只發射最後一項(或者滿足某個條件的最後一項數據)

注:Last沒有實現為一個返回Observable的過濾操作符,而是實現為一個在當時就發射原始Observable指定數據項的阻塞函數。在這些實現中,如果你想要的是一個過濾操作符,最好使用TakeLast(1)。

 

 Integer[]items = {1,2,3,4,5,6,7,8};
        Observable myObservable = Observable.from(items)
                .last();
        Subscriber mySubscriber =new Subscriber() {
            @Override
            public void onNext(Integer integer) {
                System.out.println("onNext................."+integer);
            }

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

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

        myObservable.subscribe(mySubscriber);

運行結果:

 

\

六、lastOrDefault

lastOrDefault與last類似,不同的是,如果原始Observable沒有發射任何值,它發射你指定的默認值。

 

 Integer[]items = {};
        Observable myObservable = Observable.from(items)
                .lastOrDefault(3);
        Subscriber mySubscriber =new Subscriber() {
            @Override
            public void onNext(Integer integer) {
                System.out.println("onNext................."+integer);
            }

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

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

        myObservable.subscribe(mySubscriber);

運行結果:

 

\

七、takeLastBuffer

takeLastBuffer和takeLast類似,唯一的不同是它把所有的數據項收集到一個List再發射,而不是依次發射一個。

 

<code><code><code><code><code><code><code><code><code><code><code><code> Integer[]items = {1,2,3,4,5,6,7,8};
        Observable myObservable = Observable.from(items)
                .takeLastBuffer(4);
        Subscriber<list<integer>> mySubscriber =new Subscriber<list<integer>>() {
            @Override
            public void onNext(List<integer> list) {
                System.out.println("onNext方法中集合的長度是................."+list.size());
                for(int i=0;i<list.size();i++){ override="" public="" void="" throwable="" pre="">

 

運行結果:

\

八、skip

跳過之前的n項,從n+1項開始發射數據

 

 Integer[]items = {1,2,3,4,5,6,7,8};
        Observable myObservable = Observable.from(items)
                .skip(4);
        Subscriber mySubscriber =new Subscriber() {
            @Override
            public void onNext(Integer integer) {
                System.out.println("onNext................."+integer);
            }

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

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

        myObservable.subscribe(mySubscriber);
運行結果:

 

\

 

九、skipLast

SkipLast操作符,你可以忽略原始Observable發射的後N項數據,只保留之前的數據。注意:這個機制是這樣實現的:延遲原始Observable發射的任何數據項,直到它發射了N項數據。

 

 Integer[]items = {1,2,3,4,5,6,7,8};
        Observable myObservable = Observable.from(items)
                .skipLast(4);
        Subscriber mySubscriber =new Subscriber() {
            @Override
            public void onNext(Integer integer) {
                System.out.println("onNext................."+integer);
            }

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

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

        myObservable.subscribe(mySubscriber);
運行結果:

 

\

十、take

 

Take操作符讓你可以修改Observable的行為,只返回前面的N項數據,然後發射完成通知,忽略剩余的數據。

Integer[]items = {1,2,3,4,5,6,7,8};
        Observable myObservable = Observable.from(items)
                .take(4);
        Subscriber mySubscriber =new Subscriber() {
            @Override
            public void onNext(Integer integer) {
                System.out.println("onNext................."+integer);
            }

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

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

        myObservable.subscribe(mySubscriber);
運行結果:   \
  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved