Android之Rxjava2.X 7————Rxjava 条件操作符

Android之Rxjava2.X 7————Rxjava 条件操作符

一. 目录

二. 概述

1.作用

通过设置函数,判断被观察者(Observable)发送的事件是否符合条件

2.类型

这里写图片描述

三. 具体操作符详解

1.all()

作用:判定是否Observable发射的所有数据都满足某个条件
这里写图片描述

具体使用:

 private void rxJavaDemo10() {
        Observable.just(1, 2, 3, 4, 5).
                all(new Predicate<Integer>() {
            @Override
            public boolean test(Integer integer) throws Exception {
                return integer <= 10;
            }
        }).subscribe(new Consumer<Boolean>() {
            @Override
            public void accept(Boolean aBoolean) throws Exception {
                Log.d(TAG, "accept: "+aBoolean);
            }
        });


    }

这里写图片描述

2.takeWhile()
  • 作用:发射Observable发射的数据,直到一个指定的条件不成立

原理图:
这里写图片描述

具体使用

  Observable.just(1, 2, 3, 4, 5)
                .takeWhile(new Predicate<Integer>() {
                    @Override
                    public boolean test(Integer integer) throws Exception {
                         return (integer!=3);
                    }
                }).subscribe(new Consumer<Integer>() {
            @Override
            public void accept(Integer integer) throws Exception {
                Log.d(TAG, "accept: "+integer);

            }
        });

这里写图片描述

3.skipWhile()
  • 作用:丢弃Observable发射的数据,直到一个指定的条件不成立

原理图:
这里写图片描述

具体使用

Observable.just(1, 2, 3, 4, 5)
                .skipWhile(new Predicate<Integer>() {
                    @Override
                    public boolean test(Integer integer) throws Exception {
                         return (integer!=3);
                    }
                }).subscribe(new Consumer<Integer>() {
            @Override
            public void accept(Integer integer) throws Exception {
                Log.d(TAG, "accept: "+integer);

            }
        });

这里写图片描述

4.takeUntil()
  • 作用1:takeUntil(new Predicate) 执行到某个条件时,停止发送事件
  • 作用2:takeUntil(new Observer) takeUntil() 传入的Observable开始发送数据,(原始)第1个Observable的数据停止发送数据

原理图
这里写图片描述
这里写图片描述
具体使用1:

 Observable.just(1, 2, 3, 4, 5)
                .takeUntil(new Predicate<Integer>() {
                    @Override
                    public boolean test(Integer integer) throws Exception {
                         return (integer==3);
                    }
                }).subscribe(new Consumer<Integer>() {
            @Override
            public void accept(Integer integer) throws Exception {
                Log.d(TAG, "accept: "+integer);

            }
        });

这里写图片描述

具体使用2

Observable.interval(1, TimeUnit.SECONDS)
                // 第2个Observable:延迟5s后开始发送1个Long型数据
                .takeUntil(Observable.timer(5, TimeUnit.SECONDS))
                .subscribe(new Consumer<Long>() {
                    @Override
                    public void accept(Long integer) throws Exception {
                        Log.d(TAG, "accept: " + integer);

                    }
                });

这里写图片描述

5.skipUntil()
  • 作用:等到 skipUntil() 传入的Observable开始发送数据,(原始)第1个Observable的数据才开始发送数据

原理图:
这里写图片描述

具体使用

Observable.interval(1, TimeUnit.SECONDS)
                // 第2个Observable:延迟5s后开始发送1个Long型数据
                .skipUntil(Observable.timer(5, TimeUnit.SECONDS))
                .subscribe(new Consumer<Long>() {
                    @Override
                    public void accept(Long integer) throws Exception {
                        Log.d(TAG, "accept: " + integer);

                    }
                });

这里写图片描述

6.SequenceEqual()
  • 作用:判定两个Observables是否发射相同的数据序列。若相同,返回 true;否则,返回 false

原理图:
这里写图片描述

具体使用:

 Observable
                .sequenceEqual(Observable.just(1,2,3,4),Observable.just(1,2,3,4))
                .subscribe(new Consumer<Boolean>() {
                    @Override
                    public void accept(Boolean integer) throws Exception {
                        Log.d(TAG, "accept: " + integer);

                    }
                });

这里写图片描述

7.contains()
  • 作用:判断发送的数据中是否包含指定数据

原理图:
这里写图片描述

具体使用

Observable.just(1, 2, 3, 4, 5, 6)
                .contains(4)
                .subscribe(new Consumer<Boolean>() {
                    @Override
                    public void accept(Boolean integer) throws Exception {
                        Log.d(TAG, "accept: " + integer);

                    }
                });

这里写图片描述

8.isEmpty()
  • 作用:判断发送的数据是否为空

原理图:
这里写图片描述

具体使用

Observable.just(1, 2, 3, 4, 5, 6)
                .isEmpty()
                .subscribe(new Consumer<Boolean>() {
                    @Override
                    public void accept(Boolean integer) throws Exception {
                        Log.d(TAG, "accept: " + integer);

                    }
                });

这里写图片描述

9.amb()
  • 作用:当需要发送多个 Observable时,只发送 先发送数据的Observable的数据,而其余 Observable则被丢弃。

原理图:
这里写图片描述

具体使用

 List<ObservableSource<Integer>> list= new ArrayList <>();
        list.add( Observable.just(1,2,3).delay(1,TimeUnit.SECONDS));
        list.add( Observable.just(4,5,6));

        Observable.amb(list)
                .subscribe(new Consumer<Integer>() {
                    @Override
                    public void accept(Integer integer) throws Exception {
                        Log.d(TAG, "accept: " + integer);

                    }
                });
10.defaultIfEmpty()
  • 作用: 在不发送任何有效事件( Next事件)、仅发送了 Complete 事件的前提下,发送一个默认值

原理图:
这里写图片描述

具体使用

  Observable.create(new ObservableOnSubscribe<Integer>() {
            @Override
            public void subscribe(ObservableEmitter<Integer> e) throws Exception {
                e.onComplete();
            }
        }).defaultIfEmpty(10)
                .subscribe(new Consumer<Integer>() {
                    @Override
                    public void accept(Integer integer) throws Exception {
                        Log.d(TAG, "accept: " + integer);

                    }
                });

这里写图片描述

四. 参考资料

Rxjava中文文档
Android RxJava2(六)条件操作符
Android RxJava:详解 条件 / 布尔操作符

五.文章索引

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值