Rxjava 过滤操作符

filter:过滤数据 true则通过
Observable.just(1,55,99,33)
        .filter(new Func1<Integer, Boolean>() {
            @Override
            public Boolean call(Integer integer) {
                return integer > 80 ? true : false;
            }
        })
        .subscribe(new Subscriber<Integer>() {
            @Override
            public void onCompleted() {

            }

            @Override
            public void onError(Throwable e) {

            }

            @Override
            public void onNext(Integer integer) {
                Log.e(TAG,"**"+ integer);
            }
        });
03-16 11:03:23.185 10622-10622/com.iwith.smart E/RxjavaActivity: **99
takelast:只发射最后的N项数据
Observable.just(1,2,3,4,5,6,7)
        .takeLast(3)
        .subscribe(new Subscriber<Integer>() {
            @Override
            public void onCompleted() {

            }

            @Override
            public void onError(Throwable e) {

            }

            @Override
            public void onNext(Integer integer) {
                Log.e(TAG,"**"+ integer);
            }
        });
03-16 11:04:32.678 10622-10622/com.iwith.smart E/RxjavaActivity: **5
03-16 11:04:32.678 10622-10622/com.iwith.smart E/RxjavaActivity: **6
03-16 11:04:32.678 10622-10622/com.iwith.smart E/RxjavaActivity: **7
last:只发射最后的一项数据
Observable.just(1,2,3,4,5,6,7)
        .last()
        .subscribe(new Subscriber<Integer>() {
            @Override
            public void onCompleted() {

            }

            @Override
            public void onError(Throwable e) {

            }

            @Override
            public void onNext(Integer integer) {
                Log.e(TAG,"**"+ integer);
            }
        });
03-16 11:05:03.113 10622-10622/com.iwith.smart E/RxjavaActivity: **7
skip:跳过开始的N项数据
Observable.just(1,2,3,4,5,6,7)
        .skip(2)
        .subscribe(new Subscriber<Integer>() {
            @Override
            public void onCompleted() {

            }

            @Override
            public void onError(Throwable e) {

            }

            @Override
            public void onNext(Integer integer) {
                Log.e(TAG,"**"+ integer);
            }
        });
03-16 11:05:31.277 10622-10622/com.iwith.smart E/RxjavaActivity: **3
03-16 11:05:31.277 10622-10622/com.iwith.smart E/RxjavaActivity: **4
03-16 11:05:31.277 10622-10622/com.iwith.smart E/RxjavaActivity: **5
03-16 11:05:31.277 10622-10622/com.iwith.smart E/RxjavaActivity: **6
03-16 11:05:31.277 10622-10622/com.iwith.smart E/RxjavaActivity: **7
skiplast:跳过最后的N项数据
Observable.just(1,2,3,4,5,6,7)
        .skipLast(2)
        .subscribe(new Subscriber<Integer>() {
            @Override
            public void onCompleted() {

            }

            @Override
            public void onError(Throwable e) {

            }

            @Override
            public void onNext(Integer integer) {
                Log.e(TAG,"**"+ integer);
            }
        });
03-16 11:06:25.707 10622-10622/com.iwith.smart E/RxjavaActivity: **1
03-16 11:06:25.707 10622-10622/com.iwith.smart E/RxjavaActivity: **2
03-16 11:06:25.707 10622-10622/com.iwith.smart E/RxjavaActivity: **3
03-16 11:06:25.707 10622-10622/com.iwith.smart E/RxjavaActivity: **4
03-16 11:06:25.707 10622-10622/com.iwith.smart E/RxjavaActivity: **5
take:只发射开始的N项数据
Observable.just(1,2,3,4,5,6,7)
        .take(4)
        .subscribe(new Subscriber<Integer>() {
            @Override
            public void onCompleted() {

            }

            @Override
            public void onError(Throwable e) {

            }

            @Override
            public void onNext(Integer integer) {
                Log.e(TAG,"**"+ integer);
            }
        });
03-16 11:06:52.853 10622-10622/com.iwith.smart E/RxjavaActivity: **1
03-16 11:06:52.853 10622-10622/com.iwith.smart E/RxjavaActivity: **2
03-16 11:06:52.853 10622-10622/com.iwith.smart E/RxjavaActivity: **3
03-16 11:06:52.853 10622-10622/com.iwith.smart E/RxjavaActivity: **4
first / takeFirst : 只发射第一项数据,或者满足某种条件的第一项数据
Observable.just(1,2,3,4,5,6,7)
        .first()
        .subscribe(new Subscriber<Integer>() {
            @Override
            public void onCompleted() {

            }

            @Override
            public void onError(Throwable e) {

            }

            @Override
            public void onNext(Integer integer) {
                Log.e(TAG,"**"+ integer);
            }
        });
03-16 11:07:30.653 10622-10622/com.iwith.smart E/RxjavaActivity: **1
elementAt : 发射第N项数据
Observable.just(1,2,3,4,99,6,7)
        .elementAt(5)
        .subscribe(new Subscriber<Integer>() {
            @Override
            public void onCompleted() {

            }

            @Override
            public void onError(Throwable e) {

            }

            @Override
            public void onNext(Integer integer) {
                Log.e(TAG,"**"+ integer);
            }
        });
03-16 11:09:07.577 10622-10622/com.iwith.smart E/RxjavaActivity: **6
sample / throttleLast : 在这3秒内,只发射其中最后的数据
Observable.interval(1,TimeUnit.SECONDS)
        .sample(3,TimeUnit.SECONDS)
        .subscribe(new Action1<Long>() {
            @Override
            public void call(Long aLong) {
                Log.e(TAG,"**"+aLong);
            }
        });
03-16 11:10:13.283 10622-17945/com.iwith.smart E/RxjavaActivity: **1
03-16 11:10:16.282 10622-17945/com.iwith.smart E/RxjavaActivity: **4
03-16 11:10:19.283 10622-17945/com.iwith.smart E/RxjavaActivity: **7
03-16 11:10:22.282 10622-17945/com.iwith.smart E/RxjavaActivity: **10
throttleFirst :在这3秒内,只发射其中第一个数据
Observable.interval(1,TimeUnit.SECONDS)
        .throttleFirst(3,TimeUnit.SECONDS)
        .subscribe(new Action1<Long>() {
            @Override
            public void call(Long aLong) {
                Log.e(TAG,"**"+aLong);
            }
        });
03-16 11:11:16.621 18849-19113/com.iwith.smart E/RxjavaActivity: **0
03-16 11:11:19.621 18849-19113/com.iwith.smart E/RxjavaActivity: **3
03-16 11:11:22.621 18849-19113/com.iwith.smart E/RxjavaActivity: **6
03-16 11:11:25.620 18849-19113/com.iwith.smart E/RxjavaActivity: **9
03-16 11:11:28.620 18849-19113/com.iwith.smart E/RxjavaActivity: **12
debounce :从发送第一个数据开始计时,在规定的时间内,若又有数据发送,则重新计时,然后再判断规定时间内,若又有数据,则重复;若无则发送给订阅者
Observable.create(new Observable.OnSubscribe<Integer>() {
    @Override
    public void call(Subscriber<? super Integer> subscriber) {
        if (subscriber.isUnsubscribed()) return;
        try {
            for (int i = 0; i < 10; i++) {
                subscriber.onNext(i);
                try {
                    Thread.currentThread().sleep(i * 1000);
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            }
            subscriber.onCompleted();
        } catch (Exception e) {
            subscriber.onError(e);
        }
    }
}).subscribeOn(Schedulers.newThread())
.debounce(5, TimeUnit.SECONDS)
.subscribe(new Action1<Integer>() {
    @Override
    public void call(Integer integer) {
        Log.e(TAG,"------->call():" + integer);
    }
});

03-16 11:14:23.804 21804-21977/com.iwith.smart E/RxjavaActivity: ------->call():6
03-16 11:14:29.804 21804-21977/com.iwith.smart E/RxjavaActivity: ------->call():7
03-16 11:14:36.804 21804-21977/com.iwith.smart E/RxjavaActivity: ------->call():8
03-16 11:14:44.804 21804-21977/com.iwith.smart E/RxjavaActivity: ------->call():9
oftype:只发射指定类型的数据
Observable.just("first", 2, 3, "four",99).ofType(Integer.class).subscribe(new Action1<Integer>() {
    @Override
    public void call(Integer integer) {
        Log.e(TAG,"------->call():" + integer);
    }
});
03-16 11:15:31.591 21804-21804/com.iwith.smart E/RxjavaActivity: ------->call():2
03-16 11:15:31.591 21804-21804/com.iwith.smart E/RxjavaActivity: ------->call():3
03-16 11:15:31.591 21804-21804/com.iwith.smart E/RxjavaActivity: ------->call():99
timeout : 如果在一个指定的时间段后还没发射数据,就发射一个异常
Observable.timer(99,TimeUnit.SECONDS)
        .timeout(5,TimeUnit.SECONDS)
        .subscribe(new Subscriber<Long>() {
            @Override
            public void onCompleted() {
                Log.e(TAG,"onCompleted");
            }

            @Override
            public void onError(Throwable e) {
                Log.e(TAG,"onError");
            }

            @Override
            public void onNext(Long aLong) {
                Log.e(TAG,"onNext");
            }
        });
03-16 11:16:02.760 21804-23914/com.iwith.smart E/RxjavaActivity: onError
distinct : 过滤掉重复数据
Observable.just(1,1,2,6,4,99,6,6,7)
        .distinct()
        .subscribe(new Subscriber<Integer>() {
            @Override
            public void onCompleted() {

            }

            @Override
            public void onError(Throwable e) {

            }

            @Override
            public void onNext(Integer integer) {
                Log.e(TAG,"**"+ integer);
            }
        });
03-16 11:16:36.490 21804-21804/com.iwith.smart E/RxjavaActivity: **1
03-16 11:16:36.490 21804-21804/com.iwith.smart E/RxjavaActivity: **2
03-16 11:16:36.491 21804-21804/com.iwith.smart E/RxjavaActivity: **6
03-16 11:16:36.491 21804-21804/com.iwith.smart E/RxjavaActivity: **4
03-16 11:16:36.491 21804-21804/com.iwith.smart E/RxjavaActivity: **99
03-16 11:16:36.491 21804-21804/com.iwith.smart E/RxjavaActivity: **7
distinctuntilchanged : 过滤掉连续重复的数据
Observable.just(1,2,2,2,6,1,3,3,3,6)
        .distinctUntilChanged()
        .subscribe(new Subscriber<Integer>() {
            @Override
            public void onCompleted() {

            }

            @Override
            public void onError(Throwable e) {

            }

            @Override
            public void onNext(Integer integer) {
                Log.e(TAG,"**"+ integer);
            }
        });
03-16 11:17:27.584 21804-21804/com.iwith.smart E/RxjavaActivity: **1
03-16 11:17:27.584 21804-21804/com.iwith.smart E/RxjavaActivity: **2
03-16 11:17:27.584 21804-21804/com.iwith.smart E/RxjavaActivity: **6
03-16 11:17:27.584 21804-21804/com.iwith.smart E/RxjavaActivity: **1
03-16 11:17:27.584 21804-21804/com.iwith.smart E/RxjavaActivity: **3
03-16 11:17:27.584 21804-21804/com.iwith.smart E/RxjavaActivity: **6

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值