SpringWebFlux04操作符02flatmap

编程

flatMap操作符示意图如下图所示。

flatMap接收一个Function函数式接口为参数,这个函数式的输入为一个T类型数据值,输出可以是Flux或Mono:

# 在这个类:reactor.core.publisher.Flux

public final <R> Flux<R> flatMap(Function<? super T, ? extends Publisher<? extends R>> mapper);

# 在这个类:reactor.core.publisher.Mono

public final <R> Mono<R> flatMap(Function<? super T, ? extends Mono<? extends R>> transformer);

下面使用案例阐述flatMap操作符的用法。案例代码如下:

package com.test.reactor;

import reactor.core.publisher.Flux;

import reactor.test.StepVerifier;

import java.time.Duration;

/**

* flatMap操作符测试

*/

public class FlatMapOperationDemo {

public static void main(String[] args) {

StepVerifier.create(

Flux.just("flux", "mono")

// 将每个字符串拆分为包含一个字符串的字节流

.flatMap(s -> Flux.fromArray(s.split("\s*"))

//对每个元素延迟1000ms

.delayElements(Duration.ofMillis(1000)))

// 对每个元素进行打印 doOnNext不会消费数据流

.doOnNext(System.out::print))

//验证是否发出了8个元素

.expectNextCount(8)

.verifyComplete();

}

}

执行案例代码,得到类似如下结果:flux、 mono 各个单词的字符顺序输出

 fmlounxo

多次执行案例代码,会得到不同的输出结果。由此可以看出,流的合并是异步的,先来先到,并非是严格按照原始序列的顺序。

以上是 SpringWebFlux04操作符02flatmap 的全部内容, 来源链接: utcz.com/z/513214.html

回到顶部