ReactiveX的每个语言特定的实现都提供了一些操作符。 其中一些是共同提供的,但也有一些操作符仅在某些语言实现中提供。此外,每个语言实现都倾向于将其操作符命名为类似于该语言中其他上下文已熟悉的命名约定。
大多数操作符都在事件源上操作并返回一个事件源。这使我们可以在链中一个接一个地应用这些操作符。链中的每个操作符都会处理由前一个操作符的操作产生的事件源。
区别其他模式,如Builder模式,该模式使用特定类的各种方法通过方法的操作修改该对象,对同一类的项进行操作。这些模式允许以类似的方式链接方法。但是在Builder模式中,方法在链中出现的顺序通常并不重要,事件源的操作符顺序很重要。
一条链上的操作符不是单独的在原始的事件源上操作的,是依次在调用链被调用,每个操作符操作的事件源都由前一个操作符生成。
此页面首先列出了ReactiveX中被视为“核心”操作符的内容,以及指向更深入信息页面的链接,这些页面有关于这些操作符如何工作以及特定语言特定ReactiveX版本如何实现这些操作符。
接下来是一个“决策树”,可以帮助找到最适合的用例的操作符。
最后,有一个按字母排列的大多数语言特定的实现中常见的ReactiveX操作符列表。这些链接指向对应核心操作符的页面,该核心操作符指最类似于特定于语言的操作符(例如,Rx.NET“SelectMany”操作符链接到FlatMapReactiveX操作符的文档,其中“SelectMany”是Rx.NET实现)。
如果要实现自己的操作符,请参阅实现操作符.
创建新事件源的操作符。
Create — 通过调用观察者的方法从无到有创建一个事件源Defer — 在观察者订阅之前不会创建事件源,并为每个观察者创建一个新的事件源Empty/Never/Throw — 创建具有非常明确和有限行为的事件源From — 将一些其他对象或数据结构转换为事件源Interval — 创建一个事件源,它以给定的时间间隔发出一系列整数Just — 将对象或一组对象转换为发出该对象或那些对象的事件源Range — 创建一个事件源,它发出一系列连续的整数Repeat — 创建一个事件源,重复发出特定事件或事件序列Start — 创建一个发出函数返回值的事件源Timer — 创建一个事件源,在给定的延迟后发出单个事件转换事件源发出的事件的操作符。
Buffer — 周期性的将事件源发出的事件收集成捆并发出这些捆绑事件,而不是一次发送一个事件FlatMap — 将事件源发出的事件转换为多个事件源,然后将这事件的依次发出GroupBy — 将一个事件源根据不同的事件按key划分为一组事件源Map — 每个事件源发出的事件通过将函数处理后在发出Scan — 依次的用聚合函数处理事件源发出的事件, 并发出每个连续的值Window — 将事件源中的事件周期性划分为事件源窗口并发出这些窗口,而不是一次发出一个事件从源事件源有选择地发出事件的操作符。
Debounce — 如果特定的时间跨度已经过去而没有发出另一个事件则从事件源发出一个事件Distinct — 对事件源发出的事件去重ElementAt — 仅从事件源发出位置n的事件Filter — 仅发出通过断言正确的事件源中的那些事件First — 从事件源中仅发出第一个事件或满足条件的第一个事件IgnoreElements — 不从事件源中发出任何事件,但要反馈其终止通知Last — 仅发出事件源发出的最后一哥事件Sample — 在固定的时间间隔采样事件源最靠近的事件发出Skip — 跳过事件源发出的前n个事件SkipLast — 跳过事件源发出的最后n个事件Take — 仅从事件源发出的前n个事件TakeLast — 仅从事件源发出的最后n个事件通过合并多个源事件源创建一个事件源的操作符。
And/Then/When — 使用Pattern和Plan中介组合两个或多个事件源发出的事件CombineLatest — 当两个事件源中的任何一个发出一个事件时,通过指定的函数组合每个事件源发出的最新事件并发出Join — 在另一个事件源发出的事件定义的时间窗口期间发出一个事件源中的事件,组合两个事件源发出的事件Merge — 合并发送的事件来合并多个事件源为一个StartWith — 在开始从源事件源发出事件之前,先发出指定的事件序列Switch — 将发出多个事件源转换为单个事件源,该事件源发出多个事件源中最近发出的事件Zip — 通过指定的函数将多个事件源的发出的事件排放组合在一起并发出有助于捕获事件源的错误通知的操作符。
用于处理事件源的有用操作符的集合。
Delay — 事件源延迟指定时间发出事件Do — 注册要对事件源生命周期中发生的各种事件执行的操作Materialize/Dematerialize — 发出表达事件源发出的事件(通知)类型,和逆操作ObserveOn — 指定观察者将观察此事件源的调度程序Serialize — 强制事件源进行序列化调用并保持良好行为和同步Subscribe — 根据事件源的发出的事件或通知进行操作SubscribeOn — 指定事件源在订阅时应使用的调度器TimeInterval — 将发出事件的事件源转换为发出这些事件之间的时间间隔Timeout — 镜像源事件源,但如果在指定时间段内没有任何发出的事件,则发出错误通知Timestamp — 为事件源发出的每个事件附加时间戳Using — 创建与事件源具有相同生命周期的可支配资源评估事件源发出的一个或多个事件源或事件的操作符。
All — 确定事件源发出的所有事件是否符合某些条件Amb — 给定两个或多个源事件源,仅从第一个发出事件或通知的事件源中发出所有事件Contains — 确定事件源是否发出指定项目DefaultIfEmpty — 如果源事件源不发出任何内容,则发出默认事件SequenceEqual — 确定两个事件源是否发出相同的事件序列SkipUntil — 丢弃事件源发出的事件,直到第二个事件源发出事件为止SkipWhile — 丢弃事件源发出的事件,直到指定的条件变为falseTakeUntil — 在第二个事件源发出事件或终止后,丢弃事件源发出的事件TakeWhile — 在指定条件变为false后丢弃事件源发出的事件对事件源发出的整个事件序列进行算术运算的操作符
Average — 计算事件源发出的数字的平均值并发出此数值Concat — 无交叉的拼接两个或多个事件源发出的事件Count — 计算源事件源发出的事件数并发出此数值Max — 计算事件源发出的数字的最大值并发出此数值Min — 计算事件源发出的数字的最小值并发出此数值Reduce — 相继的用函数处理事件源发出的事件, 并发出最终的值Sum — 计算事件源发出的数字的和并发出此数值精确控制的订阅动态的特殊事件源。
Connect — 指示可连接的事件源开始向其观察者发出事件Publish — 将普通的事件源转换为可连接的事件源RefCount — 使可连接事件源的行为类似于普通的事件源Replay — 确保所有观察者都看到相同的事件序列,即使他们在事件源开始发出事件后订阅To — 将事件源转换为另一种对象或数据结构此树可以帮助找到所需的ReactiveX事件源操作符。
Pattern和Plan中介组合通知对象中公认的核心操作符名称以黑体字显示。 其他条目表示ReactiveX核心操作符集之外的特殊操作符或特定于语言的操作符的变体。
AggregateAllAmbambArrayambWithand_AndAnyapplyas_blockingasObservableAssertEqualasyncActionasyncFuncAverageaverageDoubleaverageFloataverageIntegeraverageLongblockingblockingFirstblockingForEachblockingIterableblockingLastblockingLatestblockingMostRecentblockingNextblockingSingleblockingSubscribeBufferbufferWithCountbufferWithTimebufferWithTimeOrCountbyLinecachecacheWithInitialCapacitycaseCastCatchcatchErrorcatchExceptioncollectcollect (RxScala version of Filter)collectIntoCombineLatestcombineLatestDelayErrorcombineLatestWithConcatconcat_allconcatAllconcatArrayconcatArrayDelayErrorconcatArrayEagerconcatDelayErrorconcatEagerconcatMapconcatMapDelayErrorconcatMapEagerconcatMapEagerDelayErrorconcatMapIterableconcatMapObserverconcatMapToconcatWithConnectconnect_foreverconsContainscontrolledCountcountLongCreatecycleDebouncedecodeDefaultIfEmptyDeferdeferFutureDelaydelaySubscriptiondelayWithSelectorDematerializeDistinctdistinctKeydistinctUntilChangeddistinctUntilKeyChangedDodoActiondoAfterTerminatedoOnCompletedoOnCompleteddoOnDisposedoOnEachdoOnErrordoOnLifecycledoOnNextdoOnRequestdoOnSubscribedoOnTerminatedoOnUnsubscribedoseqdoWhiledropdropRightdropUntildropWhileElementAtElementAtOrDefaultEmptyemptyObservableempty?encodeensureserroreveryexclusiveexistsexpandfailWithFilterfilterNotFinallyfinallyActionfinallyDofindfindIndexFirstfirstElementFirstOrDefaultfirstOrElseFlatMapflatMapFirstflatMapIterableflatMapIterableWithflatMapLatestflatMapObserverflatMapWithflatMapWithMaxConcurrentflat_map_with_indexflattenflattenDelayErrorfoldlfoldLeftforforallForEachforEachFutureforEachWhileforInforkJoinFromfromActionfromArrayFromAsyncPatternfromCallablefromCallbackFromEventFromEventPatternfromFunc0fromFuturefromIterablefromIteratorfrom_listfromNodeCallbackfromPromisefromPublisherfromRunnableGenerategenerateWithAbsoluteTimegenerateWithRelativeTimegeneratorGetEnumeratorgetIteratorGroupByGroupByUntilGroupJoinheadheadOptionheadOrElseififThenIgnoreElementsindexOfinterleaveinterposeIntervalintervalRangeintoisEmptyitemsJoinjoin (string)jortSortjortSortUntilJustkeepkeep-indexedLastlastElementlastOptionLastOrDefaultlastOrElseLatestlatest (Rx.rb version of Switch)lengthletletBindliftlimitLongCountManySelectMapmap (RxClojure version of Zip)MapCatmapCat (RxClojure version of Zip)map-indexedmapTomapWithIndexMaterializeMaxMaxByMergemergeAllmergeArraymergeArrayDelayErrormerge_concurrentmergeDelayErrormergeObservablemergeWithMinMinByMostRecentMulticastmulticastWithSelectornestNeverNextNext (BlockingObservable version)nonenonEmptynthObserveOnObserveOnDispatcherobserveSingleOnofof_arrayofArrayChangesof_enumerableof_enumeratorofObjectChangesOfTypeofWithScheduleronBackpressureBlockonBackpressureBufferonBackpressureDropOnErrorResumeNextonErrorReturnonErrorReturnItemonExceptionResumeNextonTerminateDetachorElsepairspairwisepartitionpartition-allpausablepausableBufferedpluckproductPublishPublishLastpublish_synchronizedpublishValueraise_errorRangeReducereduceWithreductionsRefCountRepeatrepeat_infinitelyrepeatUntilrepeatWhenReplayrescue_errorrestRetryretry_infinitelyretryUntilretryWhenReturnreturnElementreturnValuerunAsyncsafeSubscribeSampleScanscanWithscopeSelect (alternate name of Map)select (alternate name of Filter)selectConcatselectConcatObserverSelectManyselectManyObserverselect_switchselectSwitchselectSwitchFirstselectWithMaxConcurrentselect_with_indexseqSequenceEqualsequence_eql?SequenceEqualWithSerializeshareshareReplayshareValueSinglesingleElementSingleOrDefaultsingleOptionsingleOrElsesizeSkipSkipLastskipLastWithTimeSkipUntilskipUntilWithTimeSkipWhileskipWhileWithIndexskip_with_timesliceslidingslidingBuffersomesortsortedsort-bysorted-list-bysplitsplit-withStartstartAsyncstartFutureStartWithstartWithArraystringConcatstopAndWaitsubscribesubscribeActualSubscribeOnSubscribeOnDispatchersubscribeOnCompletedsubscribeOnErrorsubscribeOnNextsubscribeWithSumsumDoublesumFloatsumIntegersumLongSwitchswitchCaseswitchIfEmptyswitchLatestswitchMapswitchMapDelayErrorswitchOnNextswitchOnNextDelayErrorSynchronizeTaketake_with_timetakeFirstTakeLasttakeLastBuffertakeLastBufferWithTimetakeLastWithTimetakeRight (参考: TakeLast)TakeUntiltakeUntilWithTimeTakeWhiletakeWhileWithIndextailtaptapOnCompletedtapOnErrortapOnNextThenthenDoThrottlethrottleFirstthrottleLastthrottleWithSelectorthrottleWithTimeoutThrowthrowErrorthrowExceptionTimeIntervalTimeouttimeoutWithSelectorTimerTimestampToto_aToArrayToAsynctoBlockingtoBufferto_dictToDictionaryToEnumerableToEventToEventPatternToFlowableToFutureto_htoIndexedSeqtoIterabletoIteratorToListToLookuptoMaptoMultiMapToObservabletoSettoSortedListtoStreamToTasktoTraversabletoVectortumblingtumblingBufferunsafeCreateunsubscribeOnUsingWhenWherewhilewhileDoWindowwindowWithCountwindowWithTimewindowWithTimeOrCountwindowedwithFilterwithLatestFromZipzipArrayzipIterablezipWithzipWithIndex+++::+