RxJava系列 (五) 过滤型操作符

过滤,自然是过滤上游发出的不合格事件,剩下合格的事件继续发给下游。

1. filter

过滤条件在Predication的test方法里定义。

        Observable.just("1","2","3")
                .filter(new Predicate<String>() {
                    @Override
                    public boolean test(String s) throws Exception {
                        if(s.equalsIgnoreCase("1")) {
                            return false;
                        }else {
                            return true;
                        }
                    }
                })
                .subscribe(new Consumer<String>() {
                    @Override
                    public void accept(String s) throws Exception {

                    }
                });

2. take

只能与定时器操作符interval配合使用,才能解锁take的价值所在。//如何结束?

Observable.interval(1, TimeUnit.SECONDS)
        .take(3)
        .subscribe(new Consumer<Long>() {
            @Override
            public void accept(Long aLong) throws Exception {
                //取前面3秒的,3个事件
            }
        });

3. distinct

过滤重复的事件。

        Observable.create(new ObservableOnSubscribe<String>() {
            @Override
            public void subscribe(ObservableEmitter<String> emitter) throws Exception {
                emitter.onNext("1");
                emitter.onNext("2");
                emitter.onNext("3");
            }
        }).distinct(new Function<String, String>() {
            @Override
            public String apply(String s) throws Exception {
                return null;
            }
        })
                .subscribe(new Consumer<String>() {
                    @Override
                    public void accept(String s) throws Exception {

                    }
                });

4. elementAt

指定过滤的内容。靠下标指定时间内容。如果没有满足的下标,就输出默认的事件内容。

        Observable.create(new ObservableOnSubscribe<String>() {
            @Override
            public void subscribe(ObservableEmitter<String> emitter) throws Exception {
                emitter.onNext("1");
                emitter.onNext("2");
                emitter.onNext("3");
            }
        })
                .elementAt(2, "default 100")
                .subscribe(new Consumer<String>() {
                    @Override
                    public void accept(String s) throws Exception {
//输出3
                    }
                });
​

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值