前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >一篇RxJava友好的文章(二)

一篇RxJava友好的文章(二)

作者头像
方志朋
发布2017-12-29 16:08:55
5520
发布2017-12-29 16:08:55
举报

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

1.distinct操作符

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

Paste_Image.png
Paste_Image.png
代码语言:javascript
复制
 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项数据

Paste_Image.png
Paste_Image.png
代码语言:javascript
复制
   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操作符

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

Paste_Image.png
Paste_Image.png
代码语言:javascript
复制
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 正好相反。

代码语言:javascript
复制
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 最近的数据

Paste_Image.png
Paste_Image.png
代码语言:javascript
复制
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项数据。

Paste_Image.png
Paste_Image.png
代码语言:javascript
复制
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项数据跳过不发射。

所有的过滤操作符:

Paste_Image.png
Paste_Image.png

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-10-30 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.distinct操作符
  • 2.ElementAt
  • 3.first操作符
  • 4.last 操作符
  • 5.sample操作符
  • 6.skip操作符
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档