当前位置: 首页 > news >正文

RxJava(四)-过滤操作符

1.filter
  根据Predicate类中,给定的条件,对上游集合中的数据进行判断。如果给定条件返回true则继续向下传递,否则过滤掉。


Observable.fromArray(1, 2, 3, 4, 5, 6, 7, 8, 9).filter(new Predicate<Integer>() {
    @Override
    public boolean test(@NonNull Integer integer) throws Exception {
        return integer % 2 == 0;
    }
    }).subscribe(new Observer<Integer>() {
        @Override
        public void onSubscribe(@NonNull Disposable d) {

        }

        @Override
        public void onNext(@NonNull Integer integer) {
             Log.e("rxjava","onNext "+integer);
        }

        @Override
        public void onError(@NonNull Throwable e) {

        }

        @Override
        public void onComplete() {

        }
    });
执行结果:
rxjava: onNext 2
rxjava: onNext 4
rxjava: onNext 6
rxjava: onNext 8

上面的列子是一个数组,给定条件是integer % 2 == 0,如果是偶数则继续传递,否则过滤掉。
filter返回的是ObservableFilter,ObservableFilter(ObservableSource<T> source, Predicate<? super T> predicate)
接收两个参数,source就是传进来的被观察者,predicate就是预置条件,如果为true,则调用下游的onNext方法进行传递。
2.distinct:不同的
 去重,去掉被观察者中重复的元素

Observable.fromArray(1,2,3,4,5,4,3,2,1).distinct().subscribe(new Observer<Integer>() {
        @Override
        public void onSubscribe(@NonNull Disposable d) {

        }

        @Override
        public void onNext(@NonNull Integer integer) {
             Log.e("rxjava","onNext "+integer);
        }

        @Override
        public void onError(@NonNull Throwable e) {

        }

        @Override
        public void onComplete() {

        }
    });
执行结果:
rxjava: onNext 1
rxjava: onNext 2
rxjava: onNext 3
rxjava: onNext 4
rxjava: onNext 5

distinct去掉集合中重复的元素。通过源码分析可知,去重原理是通过创建的HashSet去重的。
 

public final Observable<T> distinct() {
    return distinct(Functions.identity(), Functions.createHashSet());
}

3.skip:过滤掉前面的n项数据
  skipLast:过滤掉后面的n项数据

Observable.fromArray(1,2,3,4,5,6,7,8,9).skip(3).skipLast(3).subscribe(new Observer<Integer>() {
            @Override
            public void onSubscribe(@NonNull Disposable d) {

            }

            @Override
            public void onNext(@NonNull Integer integer) {
                 Log.e("rxjava","onNext "+integer);
            }

            @Override
            public void onError(@NonNull Throwable e) {

            }

            @Override
            public void onComplete() {

            }
        });
执行结果:
rxjava: onNext 4
rxjava: onNext 5
rxjava: onNext 6

4.take 取前n项数据
  take 取后n项数据

Observable.fromArray(1, 2, 3, 4, 5, 6, 7, 8, 9).take(3).subscribe(new Observer<Integer>() {
            @Override
            public void onSubscribe(@NonNull Disposable d) {

            }

            @Override
            public void onNext(@NonNull Integer integer) {
                Log.e("rxjava", "onNext " + integer);
            }

            @Override
            public void onError(@NonNull Throwable e) {

            }

            @Override
            public void onComplete() {

            }
        });
执行结果:
rxjava: onNext 1
rxjava: onNext 2
rxjava: onNext 3

相关文章:

  • 高级数据结构——图
  • 数据库(mysql)之事务
  • MapReduce基础入门1
  • 嵌入式系统开发笔记88:认识51微控制器系统架构
  • monorepo
  • ReentrantLock源码解析
  • 矩阵的运算规则
  • 公众号查题方法-授权即可使用
  • ElasticSearch(二)【Kibana】
  • Shell-基础(一):Shell解释器、Shell脚本
  • 项目后端环境和前端环境的搭建
  • 8.Docker MySQL 主从复制
  • 深度学习环境配置10——Ubuntu下的torch==1.7.1环境配置
  • 【C++】初窥C++
  • 12、Java——对象和类案例代码详解
  • 收藏网友的 源程序下载网
  • [Vue CLI 3] 配置解析之 css.extract
  • 【407天】跃迁之路——程序员高效学习方法论探索系列(实验阶段164-2018.03.19)...
  • 【Redis学习笔记】2018-06-28 redis命令源码学习1
  • C++类中的特殊成员函数
  • CAP理论的例子讲解
  • Docker 笔记(1):介绍、镜像、容器及其基本操作
  • ECMAScript 6 学习之路 ( 四 ) String 字符串扩展
  • fetch 从初识到应用
  • HTTP 简介
  • Intervention/image 图片处理扩展包的安装和使用
  • Linux Process Manage
  • Mac 鼠须管 Rime 输入法 安装五笔输入法 教程
  • MySQL QA
  • MySQL几个简单SQL的优化
  • Netty+SpringBoot+FastDFS+Html5实现聊天App(六)
  • Odoo domain写法及运用
  • passportjs 源码分析
  • Python十分钟制作属于你自己的个性logo
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • tab.js分享及浏览器兼容性问题汇总
  • vue学习系列(二)vue-cli
  • webpack+react项目初体验——记录我的webpack环境配置
  • 大数据与云计算学习:数据分析(二)
  • 动手做个聊天室,前端工程师百无聊赖的人生
  • 计算机常识 - 收藏集 - 掘金
  • 快速构建spring-cloud+sleuth+rabbit+ zipkin+es+kibana+grafana日志跟踪平台
  • 漂亮刷新控件-iOS
  • 区块链技术特点之去中心化特性
  • 如何打造100亿SDK累计覆盖量的大数据系统
  • 数组的操作
  • 云栖大讲堂Java基础入门(三)- 阿里巴巴Java开发手册介绍
  • 正则学习笔记
  • 3月27日云栖精选夜读 | 从 “城市大脑”实践,瞭望未来城市源起 ...
  • AI又要和人类“对打”,Deepmind宣布《星战Ⅱ》即将开始 ...
  • mysql 慢查询分析工具:pt-query-digest 在mac 上的安装使用 ...
  • 整理一些计算机基础知识!
  • ​​​​​​​sokit v1.3抓手机应用socket数据包: Socket是传输控制层协议,WebSocket是应用层协议。
  • #我与虚拟机的故事#连载20:周志明虚拟机第 3 版:到底值不值得买?
  • #预处理和函数的对比以及条件编译