SpringWebFlux04操作符02flatmap
flatMap操作符示意图如下图所示。
flatMap接收一个Function函数式接口为参数,这个函数式的输入为一个T类型数据值,输出可以是Flux或Mono:
# 在这个类:reactor.core.publisher.Fluxpublic 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