为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

桃花长相依 2022-01-06 17:57:35
我想要一个Mono调用另一个异步方法的方法,该方法返回一个Optional类型:如果Optional不为空,则有一个值,是MonoEmpty如果Optional值为空。这是我现在所做的:Mono.fromCallable(() -> someApi.asyncCall())    .filter(Optional::isPresent)    .map(Optional::get)显然,这并不理想,因为它在可调用完成后使用了两个运算符。如果可能,我想Mono.empty()从 inside获得or mono 值fromCallable。实现我想要的最佳方式是什么?
查看完整描述

3 回答

?
Qyouu

TA贡献1786条经验 获得超11个赞

有一种替代方法,flatMap它比它好一点Optional.isPresentOptional.get并且可能导致意外调用 get on empty Optional

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


查看完整回答
反对 回复 2022-01-06
?
莫回无

TA贡献1865条经验 获得超7个赞

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

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

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


查看完整回答
反对 回复 2022-01-06
?
MYYA

TA贡献1868条经验 获得超4个赞

怎么样:


Optional<Integer> optional = Optional.of(5);

Mono<Optional<Integer>> monoWithOptional = Mono.just(optional);

Mono<Integer> monoWithoutOptional = monoWithOptional.flatMap(Mono::justOrEmpty);


查看完整回答
反对 回复 2022-01-06
  • 3 回答
  • 0 关注
  • 224 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信