在 Project Reactor 中处理来自 Mono 的可选值

我想要一个Mono调用另一个异步方法的方法,该方法返回一个Optional类型:

  1. 如果Optional不为空,则有一个值,

  2. MonoEmpty如果Optional值为空。

这是我现在所做的:

Mono.fromCallable(() -> someApi.asyncCall())

    .filter(Optional::isPresent)

    .map(Optional::get)

显然,这并不理想,因为它在可调用完成后使用了两个运算符。如果可能,我想Mono.empty()从 inside获得or mono 值fromCallable

实现我想要的最佳方式是什么?


桃花长相依
浏览 225回答 3
3回答

Qyouu

有一种替代方法,flatMap它比它好一点Optional.isPresent,Optional.get并且可能导致意外调用 get on empty Optional:Mono.fromCallable(() -> someApi.asyncCall())   .flatMap(optional -> optional.map(Mono::just).orElseGet(Mono::empty))

莫回无

Mono 具有justOrEmpty可以与Optional<? extends T>类型一起使用的方法。当Optional.empty() == true我们有MonoEmpty.创建一个新的 Mono,如果 Optional.isPresent() 则发出指定的项目,否则只发出 onComplete。Mono<String>&nbsp;value&nbsp;=&nbsp;Mono.justOrEmpty(someApi.asyncCall());

MYYA

怎么样:Optional<Integer> optional = Optional.of(5);Mono<Optional<Integer>> monoWithOptional = Mono.just(optional);Mono<Integer> monoWithoutOptional = monoWithOptional.flatMap(Mono::justOrEmpty);
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java