一篇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项数据跳过不发射。
所有的过滤操作符:

好了,今天的讲解了过滤操作符,写了这篇文章相信你很快就会理解。
过滤操作符不止这些,另外还有很多其他的过滤操作符,需要你们自己一个一个的摸索了。感谢大家,如果觉得可以点个赞吧,哈哈……
_
扫码关注公众号有惊喜
(转载本站文章请注明作者和出处 方志朋的博客)
一篇RxJava友好的文章(二)的更多相关文章
- 一篇RxJava友好的文章(三)
组合操作符 继上一篇讲述了过滤操作符,这一篇讲述组合操作符,组合操作符可用于组合多个Observable.组合操作符相对于过滤操作符要复杂很多,也较难以理解,需要花费时间去看文档查资料,写demo才能 ...
- 一篇RxJava友好的文章(一)
转载请标明出处: http://blog.csdn.net/forezp/article/details/52886700 本文出自方志朋的博客 Rxjava在目前的开发中已经是如火如荼,非常的流行, ...
- 《转载-两篇很好的文章整合》Android中自定义控件
两篇很好的文章,有相互借鉴的地方,整合到一起收藏 分别转载自:http://blog.csdn.net/xu_fu/article/details/7829721 http://www.cnblogs ...
- 给B公司的一些建议(又一篇烂尾的文章)
感慨:太多太多的悲伤故事,发生在自己身上,发生在自己的身边.因此,为了避免总是走"弯路",走"错误"的道路,最近一直在完善自己的理论模型. 烂尾说明:本文是一篇 ...
- 关于博主skywang123456文章——二叉堆(三)之 Java的实现的质疑
博客园博主skywang123456(以下简称s博主)是一个大牛级的人物,相信很多程序员都拜读过他的博客,我也不例外,并且受益匪浅.但是对于文章二叉堆(三)之 Java的实现我有一些疑惑,写在这里,供 ...
- (转)干货|这篇TensorFlow实例教程文章告诉你GANs为何引爆机器学习?(附源码)
干货|这篇TensorFlow实例教程文章告诉你GANs为何引爆机器学习?(附源码) 该博客来源自:https://mp.weixin.qq.com/s?__biz=MzA4NzE1NzYyMw==& ...
- Java多线程编程实战指南(核心篇)读书笔记(二)
(尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/76651408冷血之心的博客) 博主准备恶补一番Java高并发编程相 ...
- 小鹏汽车技术中台实践 :微服务篇 InfoQ 今天 以下文章来源于InfoQ Pro
小鹏汽车技术中台实践 :微服务篇 InfoQ 今天 以下文章来源于InfoQ Pro
- 一篇SSM框架整合友好的文章(二)
上一篇讲述了DAO 层,mybatis实现数据库的连接,DAO层接口设计,以及mybtis和spring的整合.DAO层采用接口设计方式实现,接口和SQL实现的分离,方便维护.DAO层所负责的仅仅是接 ...
随机推荐
- 2019.03.21 读书笔记 ==与Equals
首先得出一个结论:==是比较变量内存的数据,Equals是值比较.但是他们都能被重写,所以object又增加了一个RefrenceEquals不可被重写,只比较数据: [ReliabilityCont ...
- div拖动实现及优化
工作中的一个项目ui界面比较传统(chou),就想着把前端重构一下.内容之一是把导航栏从上方固定高度改为了右侧伸缩的边栏,好处是边栏可伸缩,占用面积小.不完美的地方是有时候会遮挡页面上最右边的按钮,作 ...
- ubuntu14.04通过 gvm 安装 go语言开发环境
最近用回了ubuntu ,所以打算安装golang学习当下比较火热的这个语言 本来打算使用 sudo apt-get install golang的 安装后发现 是1.2.1不是最新版 所以上网上搜了 ...
- maven实战迷你版记录
1. ~/.m2 文件 默认情况下,该文件夹下放置了 Maven 本地 仓库.m2/repository.所有的 Maven 构件(artifact)都被存储到该仓库中,以方便重用. 默认情况下,~ ...
- Tips In C
C语言中的使用操作 宏定义时使用do while防止语句的分离, 但是不使用与需要有返回值的语句, 这个时候可以参考第二条 宏定义时使用({}), ()加上{}的方式, 在代码中填写逻辑算法, 最后的 ...
- [转]在离线环境中发布.NET Core至Windows Server 2008
本文转自:http://www.cnblogs.com/durow/p/5765145.html 0x00 写在开始 之前一篇博客中写了在离线环境中使用.NET Core,之后一边学习一边写了一些页面 ...
- css内容整理1
1.css引入的四种方式1.行内2.内嵌3.链接 <link href="1.css" rel="stylesheet">4.导入@import u ...
- 斗鱼扩展--notifications提示(十二)
来说下 桌面通知 Notification,HTML5支持 Web Notifications 的实例,但是要经过用户允许, chrome://settings/content/notificati ...
- PrintPreviewControl
用于按文档打印时的外观显示PrintDocument对象.此控件没有按钮或其他用户界面元素,因此通常只有在希望编写自己的打印预览用户界面时才会使用PrintpreviewControl 属性 Docu ...
- [Maven] Project build error: 'packaging' with value 'jar' is invalid. Aggregator projects require 'pom' as packaging.
将<packaging>jar</packaging> 改为<packaging>pom</packaging>