1. 首页
  2. java基础-zp

Rxjava2

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

1.distinct操作符

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

Paste_Image.png


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

   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

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 最近的数据

Paste_Image.png

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

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

好了,今天的讲解了过滤操作符,写了这篇文章相信你很快就会理解。
过滤操作符不止这些,另外还有很多其他的过滤操作符,需要你们自己一个一个的摸索了。感谢大家,如果觉得可以点个赞吧,哈哈……^_^

看完两件小事

如果你觉得这篇文章对你挺有启发,我想请你帮我两个小忙:

  1. 关注我们的 GitHub 博客,让我们成为长期关系
  2. 把这篇文章分享给你的朋友 / 交流群,让更多的人看到,一起进步,一起成长!
  3. 关注公众号 「方志朋」,公众号后台回复「666」 免费领取我精心整理的进阶资源教程
  4. JS中文网,Javascriptc中文网是中国领先的新一代开发者社区和专业的技术媒体,一个帮助开发者成长的社区,是给开发者用的 Hacker News,技术文章由为你筛选出最优质的干货,其中包括:Android、iOS、前端、后端等方面的内容。目前已经覆盖和服务了超过 300 万开发者,你每天都可以在这里找到技术世界的头条内容。

    本文著作权归作者所有,如若转载,请注明出处

    转载请注明:文章转载自「 Java极客技术学习 」https://www.javajike.com

    标题:Rxjava2

    链接:https://www.javajike.com/article/2112.html

« Rxjava3
Rxjava1»

相关推荐

QR code