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>`。

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值