四、RxJava过滤filter,take,distinct,elementAt

四、RxJava过滤filter,take,distinct,elementAt,第1张

四、RxJava过滤filter,take,distinct,elementAt 1.项目地址

在FilterActivity里面

2.讲解 1.filter

过滤,false的表示过滤掉,true的表示保留
在 这 “三鹿”, “合生元”, “飞鸽” 三个中,三鹿保留,其他两个都过滤掉,既只打印“三鹿”。

//上游
        Observable.just("三鹿", "合生元", "飞鸽")
                //订阅
                .filter(new Predicate() {
                    @Override
                    public boolean test(String s) throws Throwable {//这里执行了三次,true表示打印,false表示不打印
                        Log.d(TAG, "test: 多少次");
//                return true;//不过滤,默认全部打印
                        if (s.equals("三鹿")) {
                            return true;
                        } else {
                            return false;
                        }
                    }
                })
                //订阅
                .subscribe(new Consumer() {
                    @Override
                    public void accept(String s) throws Throwable {
                        Log.d(TAG, "accept: " + s);
                    }
                });
2.take

可以限制打印多少个,下面的只打印8个(本来无限打印)

//定时器运行,只有在定时器运行的基础上,加入take过滤 *** 作符,才有take过滤 *** 作符的价值

        //上游
        Observable.interval(1, TimeUnit.SECONDS)//表示间隔一秒,打印一次。前面一个表示值,这里是1,后面表示单位,这里是秒
                .take(8)
                //下游
                .subscribe(new Consumer() {
                    @Override
                    public void accept(Long aLong) throws Throwable {
                        Log.d(TAG, "accept: "+aLong);
                    }
                });
3.distinct

表示去重
本来打印全部,现在去掉重复的,然后打印

//上游
        Observable.create(new ObservableOnSubscribe() {
            @Override
            public void subscribe(@NonNull ObservableEmitter emitter) throws Throwable {
                emitter.onNext(1);
                emitter.onNext(1);
                emitter.onNext(2);
                emitter.onNext(1);
                emitter.onNext(3);
                emitter.onNext(5);
                emitter.onNext(4);
                emitter.onComplete();
            }
        })
        //中间 *** 作
        .distinct()
        //下游
        .subscribe(new Consumer() {
            @Override
            public void accept(Integer integer) throws Throwable {
                Log.d(TAG, "accept: "+integer);
            }
        });

打印结果为:1,2,3,5,4

4.elementAt

指定位置打印。下面打印的是葵花宝典2。0表示打印第一个,2表示打印第三个

 //上游
        Observable.create(new ObservableOnSubscribe() {
            @Override
            public void subscribe(@NonNull ObservableEmitter emitter) throws Throwable {
                emitter.onNext("九阴真经");
                emitter.onNext("葵花宝典");
                emitter.onNext("葵花宝典2");
                emitter.onNext("乾坤大罗伊");
                emitter.onNext("独孤九剑");
                emitter.onComplete();//完成标识
            }
        })
        //中间 *** 作
        .elementAt(2,"默认典")//指定哪个保留
        //下游
        .subscribe(new Consumer() {
            @Override
            public void accept(String s) throws Throwable {
                Log.d(TAG, "accept: "+s);
            }
        });

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5582060.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-14
下一篇 2022-12-14

发表评论

登录后才能评论

评论列表(0条)

保存