Rx操作符-分类解释

注:本文译自官网连接

按功能进行分类 Operators By Category

1.创建Observable

  • Create —以编程方式调用观察者方法从头开始(from scratch)创建一个Observable
  • Defer — 在观察者订阅之后创建Observable,并为每个观察者创建一个新的Observable
  • Empty/Never/Throw — 创建具有非常精确和有限行为的Observables。
  • From/fromArray — 将一些其他对象或数据结构转换为Observable。
  • Interval — 创建一个Observable,它发出一系列整数,每间隔一段特定时间发射一个整数。
  • Just — 将一个对象或一组对象转换为一个可以发出该对象或那些对象的Observable。
  • Range — 创建一个发射某一范围连续整数的Observable,2个参数,起始值和个数
  • Repeat — 创建一个可重复发射特定项目或项目序列的Observable
  • Start — 创建一个可以发出函数返回值的Observable 注:RxJava2中没有该操作符
  • Timer — 创建一个Observable,在给定的延迟后发射一个单个项目的Observable

操作转换Observable的发射值

  • Buffer —定期将Observable中的数据项收集到bundle包中并发出这些bundle包,而不是一次只发射一个数据
  • FlatMap — 将Observable发射的数据项转换为多个Observable,然后将这些Obserable平坦化为单个Observable
  • GroupBy — 将一个Observable分成一组Observable,每个Observable从原始Observable发出不同的一组数据,按键的值组织
  • Map — 通过一个函数转化每个从Observable发射出的值。
  • Scan — 对Observable发出的每个数据项按顺序应用一个函数,并发出每个连续的值.
  • Window — 定期将Observable中的数据项细分为Observable窗口并发出这些窗口,而不是一次发送一个项目

过滤Observable

从源Observable有选择的发射数据的操作符

  • Debounce — 如果特定的时间跨度已经过去而没有发射另一个数据,则只从Observable发射某个数据
  • Distinct — 去除重复数据项
  • ElementAt — 只发射某个数据项
  • Filter — 只发射某些通过测试(test)的数据项
  • First — 只发射Observable中的第一个item或者第一个满足某条件的item
  • IgnoreElements — Observable不发射任何项目,但要镜像它的终止通知
  • Last — 只发射最后一个item.
  • Sample — 在一个时间周期中,发射最近的item
  • Skip — 不发射前n个items
  • SkipLast — 不发射最后n个items
  • Take — 只发射前n个items
  • TakeLast — 只发射最后n个items

合并Observables

合并几个源Observables来创建唯一一个Observable的操作符

  • And/Then/When — 通过PatternPlan中介结合由两个及以上的Observables发射的items
  • CombineLatest — 当一个item由两个Observable发射时,通过指定的功能合并每个Observable发射的最新item,并根据此功能的结果发射item
  • Join — 当一个Observable中的item在根据另一个Observable发射的item定义的时间窗口内发射时,将两个Observable发出的项目组合起来
  • Merge — 通过合并多个Observables发射的items把多个Observables合并为一个Observable
  • StartWith — 返回一个Observable,先发射一个指定的值,再发射源Observable发射的值
  • Switch — 将一个Observable转换成一个新Observable,新Observable发射这些Observables中最近发射的item
  • Zip — 通过指定的函数将多个Observable的发射的items结合在一起,并发射结合的items

错误处理操作符

帮助从Observable的错误中恢复的操作符

  • Catch — 从onError通知中恢复继续序列
  • Retry — 如果一个源Observable发送一个onError通知,重新订阅它,希望它能够完成而没有错误

Observable使用操作符

Observable的有用的工具箱

  • Delay — 将Observable发射的数据推迟一定时间
  • Do — 注册一个处理各种Observable生命周期事件的动作,RxJava2中的doOnNext,doAfterNext,doOnComplete等方法
  • Materialize/Dematerialize — 代表发出的items和作为发射items发送的通知,或者反过来
  • ObserveOn — 指定观察者将观察此Observable的调度程序(线程),即指定观察者Observer的运行线程
  • Serialize — 强制Observable进行序列化调用并表现良好
  • Subscribe — 根据Observable发射的数据和通知进行操作,即指定一个Observer。
  • SubscribeOn — 指定该Observable的运行线程
  • TimeInterval — 将发射items的Observable转换为能够发出指示这些发射items之间流逝的时间量的Observable(不好翻译,看原文吧)
    convert an Observable that emits items into one that emits indications of the amount of time elapsed between those emissions
  • Timeout — 镜像源Observable,但是如果一段时间内没有发出任何条目则发出错误通知
  • Timestamp — 给Observable发出的条目附加一个时间戳
  • Using — 创建一个与Observable具有相同生命周期的可支配(用后可抛弃)资源

条件与布尔运算符 Conditional and Boolean Operators

评估计算一个或多个Observables或Observables发出的条目的操作符

  • All — 确定Observable发出的所有条目是否满足某些条件
  • Amb — 给定一个或多个源Observables,仅从第一个发射item的Observable发射所有items
  • Contains — 确定Observable是否发出特定的item
  • DefaultIfEmpty — 从源Observable中发射items,如果源Observable不发射任何item则发射一个默认的item。
  • SequenceEqual — 确定两个Observables是否发出相同的items序列
  • SkipUntil — 丢弃Observable发射的items,直到第二个Observable发射item
  • SkipWhile — 丢弃Observable发射的items,直到特定条件变为false
  • TakeUntil — 在第二个Observable发射一个item或者终止后,丢弃Observable发射的items
  • TakeWhile — 某特定条件变为false后,丢弃Observable发射的item
    SkipWhile时一直丢弃,直到某个条件变为false,然后就不丢弃了。TakeWhile是一直不丢弃,直到某个条件变为false后,开始丢弃

数学与集合运算符 Mathematical and Aggregate Operators

对某个Observable发射的所有items进行操作的操作符

  • Average — 计算Observable发射的所有数字的平均值,并发射该平均值
  • Concat — 按序发射2个或多个Observables发射的items,各个Observables的items不交错。
  • Count — 计算源Observable发射的items的数量,并仅发射该值。
  • Max — 确定并发射Observable发射的最大值item。
  • Min — 确定并发射Observable发射的最小值item。
  • Reduce — 对Observable发射的每个item按照顺序应用某个函数计算和发出最终值。
  • Sum — 计算Observable发射的数字的总和,并发射该值。

背压 Backpressure Operators

可连接的Observable操作符 Connectable Observable Operators

拥有更精确控制的订阅状态的特定Observables

  • Connect — 指示可连接的Observable开始向订阅者发送项目
  • Publish — 将普通的Observable转换为可连接的Observable
  • RefCount — 使可连接的Observable像普通的Observable一样运行
  • Replay — 确保所有observers都能看到相同的发射的items,即使他们在Observable开始发射items之后订阅它

转化Observables的操作符 Operators to Convert Observables

  • To — 转化一个Observable为另一个object或数据结构。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,258评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,335评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,225评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,126评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,140评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,098评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,018评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,857评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,298评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,518评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,678评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,400评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,993评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,638评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,801评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,661评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,558评论 2 352

推荐阅读更多精彩内容

  • 创建操作 用于创建Observable的操作符Create通过调用观察者的方法从头创建一个ObservableEm...
    rkua阅读 1,826评论 0 1
  • 前言 按照官方的分类,操作符大致分为以下几种: Creating Observables(Observable的创...
    小玉1991阅读 1,050评论 0 1
  • 作者: maplejaw本篇只解析标准包中的操作符。对于扩展包,由于使用率较低,如有需求,请读者自行查阅文档。 创...
    maplejaw_阅读 45,658评论 8 93
  • RxJava正在Android开发者中变的越来越流行。唯一的问题就是上手不容易,尤其是大部分人之前都是使用命令式编...
    刘启敏阅读 1,862评论 1 7
  • 响应式编程简介 响应式编程是一种基于异步数据流概念的编程模式。数据流就像一条河:它可以被观测,被过滤,被操作,或者...
    说码解字阅读 3,063评论 0 5