Reactor之发射器(Flux、Mono)转换操作函数

Reactor 发射器转换操作函数

  • concatWithValues
@SafeVarargs
public final Flux<T> concatWithValues(T... values)

将值连接到Flux的末尾。

image
  • concat
public static <T> Flux<T> concat(Iterable<? extends Publisher<? extends T>> sources)

连接两个Flux, 连接由源下游发射的迭代转发元素提供的所有源。
通过顺序订阅第一个源,然后在订阅下一个源之前等待它完成,等等,直到最后一个源完成,从而实现连接。任何错误立即中断序列并被转发到下游。

image
  • concatDelayError
public static <T> Flux<T> concatDelayError(Publisher<? extends Publisher<? extends T>> sources)

将从父Publisher发出的ONNEXT信号连接到所有源,转发由下游源发出的元素。
通过顺序订阅第一个源,然后在订阅下一个源之前等待它完成,等等,直到最后一个源完成,从而实现连接。错误不会中断主序列,但是在其余的源有机会被连接之后被传播。

image

此操作符在取消时丢弃内部排队的元素以产生背压。

  • first
@SafeVarargs
public static <I> Flux<I> first(Publisher<? extends I>... sources)

选择第一个Publisher发出任何信号(onNext/onError/onComplete)并重放来自该Publisher的所有信号,有效地表现得像这些竞争源中最快的一个。

image

返回一个新的Flux,其性能最快。

  • merge
public static <T> Flux<T> merge(Publisher<? extends Publisher<? extends T>> source)

将由Publisher发出的Publisher序列的数据合并为交织合并序列。与concat不同的是,内部source踊跃竞争。

image

返回一个合并的Flux

  • mergeOrdered
@SafeVarargs
public static <I extends Comparable<? super I>> Flux<I> mergeOrdered(Publisher<? extends I>... sources)

通过从每个源(由它们的自然顺序定义)中选择最小值,将来自提供的Publisher序列的数据合并成有序的合并序列。这不是一个SORT(),因为它不考虑整个序列。
相反,该操作符只考虑来自每个源的一个值,并选择所有这些值中最小的值,然后为选择的源补充槽。

image

返回 一个合并Flux,但保持原始排序的合并Flux

  • switchOnNext
public static <T> Flux<T> switchOnNext(Publisher<? extends Publisher<? extends T>> mergedPublishers)

创建一个Flux,该镜像反映最近发布的Publisher,转发其数据直到源代码中的新Publisher进入。
一旦源中没有新的Publisher(源已完成),并且最后一个镜像Publisher也已完成,则生成的Flux将完成。

image
  • zip
public static <T1,T2,O> Flux<O> zip(Publisher<? extends T1> source1,
                                    Publisher<? extends T2> source2,
                                    BiFunction<? super T1,? super T2,? extends O> combinator)

将两个源压缩在一起,也就是说,等待所有源发出一个元素,并将这些元素组合成一个输出值(由提供的组合器构造)。操作将继续这样做,直到任何来源完成。错误将立即被转发。这种“Step-Merge”处理在分散聚集场景中特别有用。

image
  • all
public final Mono<Boolean> all(Predicate<? super T> predicate)

如果这个序列的所有值与谓词匹配,则发出一个布尔布尔值true 。
该实现使用短路逻辑,如果谓词与值不匹配,则用FALSE完成。

image
  • any
public final Mono<Boolean> any(Predicate<? super T> predicate)

如果这个Flux序列的任何值与谓词匹配,则发出一个布尔布尔值true。
该实现使用短路逻辑,如果任何值与谓词不匹配,则完成FALSE。

image
  • as
public final <P> P as(Function<? super Flux<T>,P> transformer)

将此Flux转换为目标类型。

  • buffer
public final Flux<List<T>> buffer()

将所有传入的值收集到一个列表缓冲器中,一旦该Flux完成,将由返回的Flux发出。

image

该操作在数据信号触发的取消或错误时丢弃缓冲器。

  • cache
public final Flux<T> cache()

将此Flux量转换为热源,并为进一步的用户缓存最后发射的信号。将保留一个无限量的OnNeXT信号。完成和错误也将被重放。

image

返回一个缓存的 Flux

  • cast
public final <E> Flux<E> cast(Class<E> clazz)

将产生的Flux类型转换为目标产生类型。

image
  • collect
public final <E> Mono<E> collect(Supplier<E> containerSupplier,
                                 BiConsumer<E,? super T> collector)

通过应用收集器BiConsumer获取容器和每个元素,将此Flux发出的所有元素收集到用户定义的容器中。收集的结果将在这个序列完成时发出。

image
  • collectList
public final Mono<List<T>> collectList()

将此Flux所发射的所有元素收集到序列完成时由结果Mono发出的列表。

image
  • defaultIfEmpty
public final Flux<T> defaultIfEmpty(T defaultV)

如果没有任何数据完成此序列,则提供默认的唯一值

image
  • distinct
public final Flux<T> distinct()

对于每一个Subscriber,跟踪已经从这个Flux 跟踪元素和过滤出重复。
值本身被记录到一个用于检测的哈希集中。如果希望使用distinct(Object::hashcode)更轻量级的方法,该方法不保留所有对象,但是更容易由于hashcode冲突而错误地认为两个元素是不同的。

image
  • doOnCancel
public final Flux<T> doOnCancel(Runnable onCancel)

当Flux被取消时触发附加行为(side-effect)。

image
  • doOnComplete
public final Flux<T> doOnComplete(Runnable onComplete)

当Flux完成时触发附加行为(side-effect)。

image
  • doOnNext
public final Flux<T> doOnNext(Consumer<? super T> onNext)

当Flux发射一个项目时附加行为(side-effect)。

image
  • filter
public final Flux<T> filter(Predicate<? super T> p)

根据给定谓词评估每个源值。如果谓词测试成功,则发出该值。如果谓词测试失败,则忽略该值,并在上游生成请求1。

image
  • log
public final Flux<T> log()

观察所有 Reactive Streams信号并使用记录器支持跟踪它们。默认值将使用Level.INFO和 java.util.logging日志记录。如果SLF4J是可用的,它将被用来代替。

image
  • map
public final <V> Flux<V> map(Function<? super T,? extends V> mapper)

通过对每个项目应用同步功能来转换由该Flux发出的项目。

image
  • then
public final <V> Mono<V> then(Mono<V> other)

让这个Flux完成,然后播放信号提供的Mono。
换句话说,忽略这个Flux和转换完成信号的发射和提供Mono完成信号。在得到的Mono中重放错误信号。

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

推荐阅读更多精彩内容