在Project Reactor中处理Mono的可选值



我想要一个Mono,它调用另一个异步方法,并将Optional类型返回给:

如果CCD_ 3不为空,则
  1. 具有值
  2. 如果Optional值为空,则为MonoEmpty

以下是我现在要做的:

Mono.fromCallable(() -> someApi.asyncCall()) .filter(Optional::isPresent) .map(Optional::get)

显然,这并不理想,因为它在可调用完成后使用了两个运算符。如果可能的话,我想要Mono.empty()或来自fromCallable内部的mono值。

实现我想要的最好方法是什么?

flatMap有一种比Optional.isPresentOptional.get好一点的替代方案,可能会导致意外调用空Optional:上的get

Mono.fromCallable(() -> someApi.asyncCall())
.flatMap(optional -> optional.map(Mono::just).orElseGet(Mono::empty))

Mono有justOrEmpty方法,可以与Optional<? extends T>类型一起使用。当Optional.empty() == true时,我们会有MonoEmpty

如果Optional.isPresent((,则创建一个发出指定项的新Mono。否则仅发出onComplete。

Mono<String> value = Mono.justOrEmpty(someApi.asyncCall());

怎么样:

Optional<Integer> optional = Optional.of(5);
Mono<Optional<Integer>> monoWithOptional = Mono.just(optional);
Mono<Integer> monoWithoutOptional = monoWithOptional.flatMap(Mono::justOrEmpty);

最新更新