Reactor的Flux和mono

 `Flux`和`Mono`都是响应式编程模型中的重要概念,它们的区别和使用如下:

1. 区别:

- `Flux`表示一个序列流,它包含多个元素,每个元素可以是基本数据类型(如int、float)、集合(如List、Set)或者自定义对象。

 

- `Mono`表示一个单播流,它只有一个元素,这个元素可以是基本数据类型、集合或者自定义对象。

 

- `Flux`适用于处理异步序列数据,而`Mono`适用于处理同步序列数据。

 

2. 使用:

- `Flux`通常用于处理异步操作,例如网络请求、文件读取等。

 

```java

Flux<Integer> flux = Flux.range(1, 5)

                           .flatMap(item -> Mono.fromSupplier(() -> Thread.sleep(500))

                                             .subscribeOn(Schedulers.io()))

                           .subscribeOn(Schedulers.parallel())

                           .subscribe(System.out::println);

```

 

- `Mono`通常用于处理同步操作,例如数据库读写、文件写入等。

 

```java

Mono<String> mono = Mono.create((Function<? super String, ? extends Publisher<?>>) input -> {

    return Flux.just(input)

                .flatMap(data -> Mono.fromCompletionStage(() -> CompletableFuture.completedFuture(data)))

                .subscribeOn(Schedulers.parallel());

})

.subscribe(System.out::println);

```

 

 `Flux`和`Mono`都是响应式编程模型中的重要概念,它们分别表示异步序列流和同步序列流。在使用时,我们可以将`Flux`和`Mono`相互转换为`List`,以方便我们对序列进行处理和操作。

 

下面是一个示例代码:

```java

Flux<Integer> flux = Flux.range(1, 5)

                           .flatMap(item -> Mono.just(item + 1)

                                                   .doOnNext(System.out::println)

                                                   .subscribeOn(Schedulers.newThread()))

                           .subscribeOn(Schedulers.parallel());

 

List<Integer> list = new ArrayList<>();

for (int i = 1; i <= 5; i++) {

    list.add(i);

}

 

// 将Flux转换为List

List<Integer> fluxList = flux.toList().block();

System.out.println("fluxList: " + fluxList);

 

// 将List转换为Flux

Flux<Integer> listFlux = Flux.fromList(list)

                               .doOnNext(System.out::println)

                               .subscribeOn(Schedulers.newThread());

 

listFlux.subscribe(System.out::println);

```

 

在上面的代码中,我们首先定义了一个`Flux<Integer>`,然后将其转换为`List<Integer>`,最后输出`List<Integer>`。接着,我们又定义了一个`List<Integer>`,然后将其转换为`Flux<Integer>`,最后输出`Flux<Integer>`。

相关推荐

  1. ReactorFluxmono

    2024-01-11 11:32:01       48 阅读
  2. 聊聊reactor-logbackAsyncAppender

    2024-01-11 11:32:01       58 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-11 11:32:01       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-11 11:32:01       106 阅读
  3. 在Django里面运行非项目文件

    2024-01-11 11:32:01       87 阅读
  4. Python语言-面向对象

    2024-01-11 11:32:01       96 阅读

热门阅读

  1. 【WinForms 窗体】常见的“陷阱”

    2024-01-11 11:32:01       54 阅读
  2. HTML 基本元素是什么?

    2024-01-11 11:32:01       60 阅读
  3. stm32 AW9523B IO扩展芯片扩展io口驱动程序

    2024-01-11 11:32:01       48 阅读
  4. 传感数据分析——傅里叶滤波:理论与公式

    2024-01-11 11:32:01       45 阅读
  5. SpringMVC-02

    2024-01-11 11:32:01       54 阅读
  6. postman发送post请求正常,但是还是有乱码.

    2024-01-11 11:32:01       57 阅读
  7. 制作github个人主页

    2024-01-11 11:32:01       56 阅读
  8. 医院挂号系统

    2024-01-11 11:32:01       45 阅读
  9. Gradle 安装及源替换详解

    2024-01-11 11:32:01       44 阅读
  10. 排序算法及其实现

    2024-01-11 11:32:01       54 阅读
  11. Mac笔记本中mysql重置密码

    2024-01-11 11:32:01       63 阅读
  12. kubeconfig有效期巡检

    2024-01-11 11:32:01       41 阅读