RxJava系列之常用条件操作符

系列文章

RxJava系列之简介和观察者设计模式
RxJava系列之上游与下游
RxJava系列之常用创建型操作符
RxJava系列之常用变换操作符
RxJava系列之常用过滤操作符
RxJava系列之常用条件操作符
RxJava系列之常用合并操作符
RxJava系列之常用异常操作符
RxJava系列之线程切换实战
RxJava系列之背压模式
RxJava系列之配合Retrofit
RxJava系列之泛型高级
RxJava系列之手写create操作符
RxJava系列之手写create操作符增加泛型限定
RxJava系列之手写just操作符
RxJava系列之手写map操作符
RxJava系列之手写切换线程

条件操作符

将上游发射的数据进行判断,下游的接收都是Boolean的。满足条件,下游接收到true,不满足条件,下游接收到false。

all

所有数据都满足条件,下游就接收到true,其中有一个不满足条件,就接收到false。

 /**
     * all,如同 if 那样的功能 :全部为true,才是true,只要有一个为false,就是false
     * @param view
     */
    public void r01(View view) {

        String v1 = "1";
        String v2 = "2";
        String v3 = "3";
        String v4 = "cc";

        // 需求:只要有一个为 cc的,就是false

        // 平常的写法
        // if (v1.equals("cc") || v2.equals("cc") || v3.equals("cc") || v4.equals("cc")) {
        if (v1 == null) {
            Log.d(TAG, "r01: " + false);
        } else {
            Log.d(TAG, "r01: " + true);
        }

        // RxJava的写法
        // 上游
        Observable.just(v1, v2, v3, v4) // RxJava 2.X 之后 不能传递null,否则会报错

        .all(new Predicate<String>() {
            @Override
            public boolean test(String s) throws Exception {
                return !s.equals("cc"); // 如果s不等于cc,就是true
            }
        })

        .subscribe(new Consumer<Boolean>() { // 下游
            @Override
            public void accept(Boolean s) throws Exception {
                Log.d(TAG, "accept: " + s);
            }
        });
    }

contains

包含某条数据,下游就接收到true,所有数据都不包含,则下游接收到false

 /**
     * contains 是否包含
     * @param view
     */
    public void r02(View view) {

        Observable.just("JavaSE", "JavaEE", "JavaME", "Android", "iOS", "Rect.js", "NDK")

        .contains("C")     // 是否包含了 Android,条件是否满足

        .subscribe(new Consumer<Boolean>() {
            @Override
            public void accept(Boolean s) throws Exception {
                Log.d(TAG, "accept: " + s);
            }
        });
    }

any

any和all是相反的。any是全部为false,下游接收到false,有一个是true,下游接收到就是true

  /**
     * Any 和 All相反的,All全部为true,才是true,只要有一个为false,就是false
     * any 全部为 false,才是false, 只要有一个为true,就是true
     * @param view
     */
    public void r03(View view) {

        Observable.just("JavaSE", "JavaEE", "JavaME", "Android", "iOS", "Rect.js", "NDK")

                .any(new Predicate<String>() {
                    @Override
                    public boolean test(String s) throws Exception {
                        return s.equals("Android");
                    }
                })     // 是否包含了 Android,条件是否满足

                .subscribe(new Consumer<Boolean>() {
                    @Override
                    public void accept(Boolean s) throws Exception {
                        Log.d(TAG, "accept: " + s);
                    }
                });

    }

总结

上游 -------> 条件操作(往右边流向的时候,条件判断) ----------> 下游

All: 如同 if 那样的功能 :全部为true,才是true,只要有一个为false,就是false.
contains 是否包含
any 全部为 false,才是false, 只要有一个为true,就是true

如果使用了条件操作符,下一层,接收的类型 就是条件类型(Boolean)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值