一篇RxJava友好的文章(二)

上一篇文章介绍了rxjava的基本用法,和一些常用的操作符,以及rxjava的链式操作带来的好处。由于rxjava非常的强大,让我如此的痴迷,我打算写五篇文章,专门讲解rxjava 常见的操作符和用法,敬请期待。这篇文章主要讲解过滤操作符。

1.distinct操作符

过滤掉重复的数据项,只让还没有发送过数据项通过。

 rx.Observable.just("1","2","2","3","4")
   .distinct(new Func1<String, String>() {
            @Override
            public String call(String s) {
                return "key"+s;//这时候比较的是key+s  而不是比较s
            }
        })
    .subscribe(new Action1<String>() {
            @Override
            public void call(String s) {
                Log.e(TAG,s);
            }
        });
    }

运行程序,输出结果 :

1 2 3 4

它的作用是去掉相同的元素,例如例子中去掉了2

2.ElementAt

只发射第n项数据

   rx.Observable.just("1","2","3")
   .elementAt(1)
   .subscribe(new Action1<String>() {//只发射第二个元素
            @Override
            public void call(String s) {
                Log.e(TAG,s);
            }
        });

        rx.Observable.just("1","2","3")
        .elementAtOrDefault(11,"11111")
        .subscribe(new Action1<String>() {//只发射第二个元素
            @Override
            public void call(String s) {
                Log.e(TAG,s);
            }
        });       

运行结果:

2 11111

elemntAt(1)发射第二项数据;elementAtOrDefault(11,”11111”),由于observable没有11找个索引元素,所以发送了默认的11111

3.first操作符

只发射第一项数据或者满足条件的第一项数据,如果你需要第一项数据,或者满足条件的第一项数据,可以使用该操作符

rx.Observable.just("1","2","3")
  .first()
  .subscribe(new Action1<String>() {
            @Override
            public void call(String s) {
                Log.e(TAG,s);
            }
        });

rx.Observable.just(1,2,3)
   .first(new Func1<Integer, Boolean>() {
          @Override
        public Boolean call(Integer integer) {
           if(integer>2) return true;
              return false;
          }
        })
    .subscribe(new Action1<Integer>() {
        @Override
        public void call(Integer integer) {
             Log.e(TAG,integer+"");
          }
      }); 

运行结果:

1 3

4.last 操作符

last只发射最后一项数据,和first 正好相反。

rx.Observable.just(1,2,3,4)
.last().subscribe(new Action1<Integer>() {
            @Override
            public void call(Integer integer) {
                Log.e(TAG,integer+"");
            }
        });

允许结果:

4

5.sample操作符

定期采样并发射 observable 最近的数据

rx.Observable.interval(300, TimeUnit.MILLISECONDS)
   .sample(2,TimeUnit.SECONDS)
   .subscribe(new Action1<Long>() {
            @Override
            public void call(Long aLong) {
                Log.e(TAG,aLong+"");
            }
        });

运行结果:

6 13 ….

observal 每300ms发射一个从0到n的数据,sample 每隔2s取一个observal 最近发射的数据,并发射出去。

6.skip操作符

跳过前n项数据,也就说不发射前n项数据。

rx.Observable.just(1,2,4,5,6)
    .skip(2)
    .subscribe(new Action1<Integer>() {
            @Override
            public void call(Integer integer) {
                Log.e(TAG,integer+"");
            }
        });

运行结果:

4 5 6

前面2项数据跳过不发射。

所有的过滤操作符:

好了,今天的讲解了过滤操作符,写了这篇文章相信你很快就会理解。 过滤操作符不止这些,另外还有很多其他的过滤操作符,需要你们自己一个一个的摸索了。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏老码农专栏

原 荐 OSGL 工具库 - Java 字串

1444
来自专栏CDA数据分析师

教你一招 | 几个SQL小知识

文 | 吴广磊 写在前面的话:之前做的一个项目,数据库及系统整体构架设计完成之后,和弟兄们经过一段时间的编码,系统如期上线,刚开始运行一切良好,后来随着数据量的...

1936
来自专栏PHP技术

帮助你认识PHP的特点与发展

写在前面的话:之前做的一个项目,数据库及系统整体构架设计完成之后,和弟兄们经过一段时间的编码,系统如期上线,刚开始运行一切良好,后来随着数 据量的急剧膨胀,慢慢...

2673
来自专栏CodingBlock

Android学习笔记(十三)SharedPreference必须掌握的基础

  我们在开发中,应用程序会保存少量数据,例如一些字符串、一些标记或者一些配置文件,这时候如果去使用SQLite保存这些数据的话,难免会显得大材小用,用起来也不...

2155
来自专栏salesforce零基础学习

salesforce 零基础学习(三十七) DML及Database方法简单描述

在apex中通过soql查询可以使用两种方式,使用DML语句或者使用Database的方法。 使用DML语句和使用Database类的方法对于我们来说用的都很多...

1897
来自专栏维C果糖

Guava 指南 之「通用 Object 方法」

通用 Object 方法 equals 当你的对象含有的多个字段可能为null的时候,实现Object.equals会很痛苦,因为你不得不分别对它们进行null...

18610
来自专栏程序员的SOD蜜

ORM查询语言(OQL)简介--高级篇:脱胎换骨

相关文章内容索引: ORM查询语言(OQL)简介--概念篇 ORM查询语言(OQL)简介--实例篇 ORM查询语言(OQL)简介--高级篇:脱胎换骨 ORM查询...

2357
来自专栏10km的专栏

jface databinding:重写doSetValue方法ComputedValue实现双向多对一的数据绑定

需求说明 如下是一个简单的测试对话框,我们希望当”起始日期”按钮为勾选时,数据对象dataBean的date属性为日期组件DateTime选择的值,否则为nul...

1929
来自专栏10km的专栏

jface databinding:可多选的widget List组件selection项目与java.util.List对象的双向数据绑定

需求说明 如下图,一个可多选的List组件,初始表有3个值,希望实现与一个java.util.List对象(保存选中的值)的双向数据绑定。当List组件中选中的...

1888
来自专栏Phoenix的Android之旅

如何用反射突破private方法的限制

反射作为Java的一个提高点,经常作为面试的内容之一。今天介绍一下最基本的反射的使用。 如何用反射来使用Class中的private方法。

772

扫码关注云+社区