一篇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 条评论
登录 后参与评论

相关文章

来自专栏KK的小酒馆

Adapter与ListView的简单应用(下)Android应用界面开发

1.继续分析Adapter的常用类 上一篇文章使用了ArrayAdapte制作了一个只由简单的文字组成的ListView,那ArrayAdapter是不是只有...

662
来自专栏学海无涯

Android开发之那些好用的数据结构与API

由于Android Application 主要是Java语言开发的,所以在写程序的时候,很多朋友们都会用到Java里面常用的数据结构,但是Android中提供...

3245
来自专栏Java学习网

Android中Java和JavaScript交互

Android中Java和JavaScript交互 Android提供了一个很强大的WebView控件用来处理Web网页,而在网页中,JavaScript又是...

2666
来自专栏郭霖

Android图片加载框架最全解析(二),从源码的角度理解Glide的执行流程

在本系列的上一篇文章中,我们学习了Glide的基本用法,体验了这个图片加载框架的强大功能,以及它非常简便的API。还没有看过上一篇文章的朋友,建议先去阅读 An...

48410
来自专栏技术小黑屋

关于Android Log的一些思考

在日常的Android开发中,日志打印是一项必不可少的操作,我们通过分析打印的日志可以分析程序的运行数据和情况。然而使用日志打印的正确姿势又是怎样呢,如何屏蔽日...

671
来自专栏向治洪

Android的DataBinding原理介绍

Activity在inflate layout时,通过DataBindingUtil来生成绑定,从代码看,是遍历contentView得到View数组对象,然后...

2958
来自专栏学海无涯

Android开发之项目经验分享

在Android开发中,除了基本的理论知识,还需要将所学知识运用到真实的项目中,在项目中锻炼自己的分析问题、解决问题的能力,本文将总结一下本人项目中遇到的一些问...

2515
来自专栏技术小黑屋

读懂 Android 中的代码混淆

在Android开发工作中,我们都或多或少接触过代码混淆。比如我们想要集成某个SDK,往往需要做一些排除混淆的操作。

872
来自专栏刘望舒

LeakCanary看这一篇文章就够了

LeakCanary是Square公司基于MAT开源的一个内存泄漏检测工具,在发生内存泄漏的时候LeakCanary会自动显示泄漏信息。

2365
来自专栏hbbliyong

LINQ to XML LINQ学习第一篇

1、LINQ to XML类 ? 以下的代码演示了如何使用LINQ to XML来快速创建一个xml: public static void CreateDoc...

2687

扫码关注云+社区