Rxjava学习(过滤Observable)

Filtering Observables(过滤Observable)

1、Debounce

仅在过了一段指定的时间还没发射数据时才发射一个数据

 //仅在过了一段指定的时间还没发射数据时才发射一个数据
        Observable.create(new Observable.OnSubscribe<Integer>() {
            @Override
            public void call(Subscriber<? super Integer> subscriber) {
                try {
                    for (int i = 0; i < 10; i++) {
                        Thread.sleep(1000);
                        subscriber.onNext(i);
                    }
                    subscriber.onCompleted();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                    subscriber.onError(e);
                }
            }
        }).debounce(1, TimeUnit.SECONDS).subscribe(new Subscriber<Integer>() {
            @Override
            public void onCompleted() {
                System.out.println("onCompleted():" + "\n");
            }

            @Override
            public void onError(Throwable throwable) {
                System.out.println("onError():" + throwable + "\n");
            }

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

 运行结果:

onNext:1
onNext:9
onCompleted():

2、Distinct

抑制(过滤掉)重复的数据项

Distinct 的过滤规则是:只允许还没有发射过的数据项通过。

 Observable.just(1, 2, 3, 2, 3)
                .distinct()
                .subscribe(new Subscriber<Integer>() {

                    @Override
                    public void onCompleted() {
                        System.out.println("onCompleted():" + "\n");
                    }

                    @Override
                    public void onError(Throwable throwable) {
                        System.out.println("onError():" + throwable + "\n");
                    }

                    @Override
                    public void onNext(Integer integer) {
                        System.out.println("onNext():" + integer + "\n");
                    }
                });

 运行结果:

onNext():1

onNext():2

onNext():3

onCompleted():

 

Observable.just("a", "a", "b", "c", "a", "b")
                .distinct()
                .subscribe(new Action1<String>() {
                    @Override
                    public void call(String integer) {
                        System.out.println(integer);
                    }
                });

 运行结果:

a
b
c

3、ElementAt

只发射第N项数据

Observable.just(2, 3, 4, 5, 6)
                .elementAt(3)
                .subscribe(new Subscriber<Integer>() {

                    @Override
                    public void onCompleted() {
                        System.out.println("onCompleted():" + "\n");
                    }

                    @Override
                    public void onError(Throwable throwable) {
                        System.out.println("onError():" + throwable + "\n");
                    }

                    @Override
                    public void onNext(Integer integer) {
                        System.out.println("onNext():" + integer + "\n");
                    }
                });

 运行结果:

onNext():5

onCompleted():

4、Filter

只发射通过了谓词测试的数据项

 

 private static void filter() {
        Observable.just(1, 2, 3, 2, 3)
                .distinct().filter(new Func1<Integer, Boolean>() {
            @Override
            public Boolean call(Integer integer) {
                return integer > 2;
            }
        }).subscribe(new Subscriber<Integer>() {

            @Override
            public void onCompleted() {
                System.out.println("onCompleted():" + "\n");
            }

            @Override
            public void onError(Throwable throwable) {
                System.out.println("onError():" + throwable + "\n");
            }

            @Override
            public void onNext(Integer integer) {
                System.out.println("onNext():" + integer + "\n");
            }
        });
    }

运行结果:

onNext():3

onCompleted():

5、First

private static void first() {
        Observable.just(9, 2, 3, 2, 3)
                .distinct().first().
                subscribe(new Subscriber<Integer>() {
                    @Override
                    public void onCompleted() {
                        System.out.println("onCompleted():" + "\n");
                    }

                    @Override
                    public void onError(Throwable throwable) {
                        System.out.println("onError():" + throwable + "\n");
                    }

                    @Override
                    public void onNext(Integer integer) {
                        System.out.println("onNext():" + integer + "\n");
                    }
                });
    }

运行结果:

onNext():9

onCompleted():

6、IgnoreElements

不会回调onNext()方法,直接调用onCompleted()方法或者onError方法
 private static void ignoreElements() {
        //不会回调onNext()方法,直接调用onCompleted()方法或者onError方法
        Observable.create(new Observable.OnSubscribe<Integer>() {
            @Override
            public void call(Subscriber<? super Integer> subscriber) {
                subscriber.onNext(123);
                subscriber.onCompleted();
            }
        }).ignoreElements().subscribe(new Subscriber<Integer>() {
            @Override
            public void onCompleted() {
                System.out.println("onCompleted():" + "\n");
            }

            @Override
            public void onError(Throwable throwable) {
                System.out.println("onError():" + throwable + "\n");
            }

            @Override
            public void onNext(Integer integer) {
                System.out.println("onNext:" + integer + "\n");
            }
        });
    }

运行结果:

onCompleted(): 

7、Last

只发射最后一项(或者满足某个条件的最后一项)数据

 

private static void laslt() {
        Observable.range(1, 10).last().subscribe(new Action1<Integer>() {
            @Override
            public void call(Integer integer) {
                System.out.println(integer);
            }
        });
    }

运行结果:

10 

8、Sample

采样

private static void sample() {
        //每隔4s才会向观察者发送数据
        Observable.create(new Observable.OnSubscribe<Integer>() {
            @Override
            public void call(Subscriber<? super Integer> subscriber) {
                try {
                    for (int i = 0; i < 10; i++) {
                        Thread.sleep(1000);
                        subscriber.onNext(i);
                    }
                    subscriber.onCompleted();
                } catch (InterruptedException e) {
                    e.printStackTrace();
                    subscriber.onError(e);
                }
            }
        }).sample(4, TimeUnit.SECONDS).subscribe(new Subscriber<Integer>() {
            @Override
            public void onCompleted() {
                System.out.println("onCompleted():" + "\n");
            }

            @Override
            public void onError(Throwable throwable) {
                System.out.println("onError():" + throwable + "\n");
            }

            @Override
            public void onNext(Integer integer) {
                System.out.println("onNext:" + integer + "\n");
            }
        });
    }

运行结果:

onNext:2

onNext:6

onNext:9

onCompleted():

9、Skip

抑制Observable发射的前N项数据,使用 Skip 操作符,你可以忽略Observable'发射的前N项数据,只保留之后的数据。

 private static void skip() {
        Observable.range(1, 10).skip(2).subscribe(new Action1<Integer>() {
            @Override
            public void call(Integer integer) {
                System.out.println(integer);
            }
        });
    }

 运行结果:

3
4
5
6
7
8
9
10

10、SkipLast

抑制Observable发射的后N项数据

private static void skipLast() {
        Observable.range(1, 10).skipLast(2).subscribe(new Action1<Integer>() {
            @Override
            public void call(Integer integer) {
                System.out.println(integer);
            }
        });
    }

运行结果:

1
2
3
4
5
6
7

11、Take

只发射前面的N项数据

 private static void take() {
        Observable.range(1, 10).take(2).subscribe(new Action1<Integer>() {
            @Override
            public void call(Integer integer) {
                System.out.println(integer);
            }
        });
    }

 运行结果:

1
2

12、TakeLast

private static void takeLast() {
        Observable.range(1, 10).takeLast(2).subscribe(new Action1<Integer>() {
            @Override
            public void call(Integer integer) {
                System.out.println(integer);
            }
        });
    }

运行结果:

9
10

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章