Android之Rxjava2.X 7————Rxjava 条件操作符_冰炭不投day的博客-程序员宅基地

技术标签: rxjava  Android 应用层  

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:详解 条件 / 布尔操作符

五.文章索引

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq_38499859/article/details/81705745

智能推荐

51单片机之外部引脚及总线接口_51单片机接口_千寻瀑༄的博客-程序员宅基地

51单片机之外部引脚及总线接口MCS-51系列外部引脚总线结构:冯诺依曼结构:哈弗结构:寻址空间的区分:MCS-51系列外部引脚记忆方法:1、在前面的存储器和特殊功能寄存器篇讲过,标志寄存器PSW的RS0和RS1位控制选择工作的4组8个为一组的通用寄存器,这4组通用寄存器的外部引脚就是上图中的4个圈起来的部分,我们称其为输入输出I/O口。共计32个引脚。有一些通用寄存器除了做为双向的I/O口外还有一些其他的特殊功能。a、P0口:在不接外存储器与不扩展I/O时,仅作为双向I/O口使用;在接有

excel服务器导出,避免文件损坏_excel写入servletoutputstream 文件损坏_不太厉害的马小哥的博客-程序员宅基地

ecplise下载excel模板,从服务器导出,主要分为两部:1.写导出功能;2.当用maven打包编译时,指定不过滤excel格式的文件。具体如下:导出代码FileInputStream inputStream=null; ServletOutputStream outputStream=null; try { String fileName...

gradle 打不同包名的apk_李yanru的博客-程序员宅基地

为了实现根据gradle打出不同的包需要进行以下几步:以我们APP包名为com.lyr.demo1为例;一、进入APP gradle;二、查看productFlavors,我们可以看到一个demo1{}我们为了实现我们的功能需要在demo1{}的同级新建一个demo2{} (demo2另一个包名)在里面输入一个applicationId  包名 vers...

07-谷歌 Chrome F12 抓包分析_谷歌f12抓包分析问题_AI悦创|编程1v1的博客-程序员宅基地

浏览器打开网页的过程就是爬虫获取数据的过程,两者是一样一样的。浏览器渲染的网页是丰富多彩的数据集合,而爬虫得到的是网页的源代码 html。有时候,我们不能在网页的 html 代码里面找到想要的数据,但是浏览器打开的网页上面却有这些数据。这就是浏览器通过 ajax 技术异步加载(偷偷下载)了这些数据。同学们禁不住要问:那么该如何看到浏览器偷偷下载的那些数据呢?答案就是谷歌 Chrome 浏览器的 F12 快捷键,也可以通过鼠标右键菜单“检查”(Inspect)打开 Chrome 自带的开发者工具,开发者

从头开始进行CUDA编程:线程间协作的常见技术_AI蜗牛车的博客-程序员宅基地

转载:Deephub Imba在前一篇文章中,我们介绍了如何使用 GPU 运行的并行算法。这些并行任务是那些完全相互独立的任务,这点与我们一般认识的编程方式有很大的不同,虽然我们可以从并行中受益,但是这种奇葩的并行运行方式对于我们来说肯定感到非常的复杂。所以在本篇文章的Numba代码中,我们将介绍一些允许线程在计算中协作的常见技术。首先还是载入相应的包from time import perf_c...

重装 Mac 系统后的安装软件和个人配置[个人习惯]_偕臧x的博客-程序员宅基地

文章目录常用软件配置PicGoistat menus 6.4.0Telegram 中文语言GitHub 加载图片丢失解决方案配置环境`Homebrew``zsh``Git``Git` 代理`vim``nvm``cnpm``Hexo`简 述: 每次重装 MacOS 后,自用安装软件清单。  常用软件必须V2rayU、Keka 压缩解压、BetterSnapTool 四个窗口、 istat menus 6.4.0 官网 + 秘钥、Xee³ 3.5.3 、MonitorControl 外接显示

随便推点

数据矿工学习-这是一篇献给新手的深度学习综述_翁JJ的博客-程序员宅基地

这篇综述论文列举出了近年来深度学习的重要研究成果,从方法、架构,以及正则化、优化技术方面进行概述。这篇综述对于刚入门的深度学习新手是一份不错的参考资料,在形成基本学术界图景、指导文献查找等方面都能提供帮助。论文:Recent Advances in Deep Learning: An Overview论文地址:https://arxiv.org/pdf/1807.08169v1.pdf...

企业级共享文件系统_逃跑的浣熊的博客-程序员宅基地

第1章 企业级共享文件系统1.1 vsftp1.1.1VSFTP 概述1.简介FTP(File Transfer Protocol,文件传输协议) 是 TCP/IP 协议组中的协议之一。用于 Internet 上的文件的双向传输。使用 FTP 来传输时,是具有一定程度的危险性, 因为数据在因特网上面是完全没有受到保护的明文传输方式!FTP协议包括两个组成部分,其一为FTP服务器,其二为FTP客户端。其中FTP服务器用来存储文件,用户可以使用FTP客户端通过FTP协议访问位于FTP服务器上的资源。在

SVN 上传时出现灰色减号_svn 灰色减号文件夹_sunjc27的博客-程序员宅基地

版权声明:本文为博主原创文章,未经博主允许不得转载。刚刚上传一个文件,经理助理编译出现了错误,可是我这边确实十分漂亮的编译过了。亲爱的助理给了我截图,如下:一看就知道了有两个叫*heckPassWord.a和*ommsEncrypt.a的库文件没找到。可是我这里明明有这两个文件啊,可是却是一个灰色的减号。然后查了一下,发现是上传时,这两个文件

h5----------------高度塌陷2_gotoschool_j的博客-程序员宅基地

&amp;lt;!DOCTYPE html&amp;gt;&amp;lt;html&amp;gt; &amp;lt;head&amp;gt; &amp;lt;meta charset=&quot;UTF-8&quot;&amp;gt; &amp;lt;title&amp;gt;&amp;lt;/title&amp;gt; &amp;lt;style type=&quot;text/css&quot;&amp;gt; .box1{ border: 1px solid red; }

一次httpclient长连接高并发问题的解决历程与研究总结_httpclient 长连接_阿西吧ckia的博客-程序员宅基地

相关背景 一个基于es的搜索项目,生产环境中目前qps为4w多,所有的业务请求通过soa落在搜索微服务集群,微服务集群中每台机器底层通过httpclient请求SLB(service load balance),SLB核心为Nginx,最终Nginx将请求分发至es物理机集群计算并返回问题描述 生产搜索微服务间歇性告警,主要为NoHttpResponseException: ***...

DeepMind加持的GNN框架正式开源,TensorFlow进入图神经网络时代_deepmind 开源 标注工具_Python数据挖掘的博客-程序员宅基地

谷歌在垃圾邮件检测、流量估计以及YouTube内容标签等环境中使用了一种强大的工具GNN(图神经网络)。11月18日,谷歌联合DeepMind对外开源TensorFlow GNN工具,助力流量预测、谣言和假新闻检测、疾病传播建模、物理模拟等领域的基础研究。11月18日,谷歌联合DeepMind发布了TensorFlow GNN(图神经网络)。目前,谷歌已经在诸如垃圾邮件检测、流量估计以及YouTube内容标签等环境中用上了这个库的早期版本。为什么要用GNN?图(Graph)是用于表示对象之间.

推荐文章

热门文章

相关标签