我想要一个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.isPresent
,Optional.get
并且可能导致意外调用 get on empty Optional
:
Mono.fromCallable(() -> someApi.asyncCall()) .flatMap(optional -> optional.map(Mono::just).orElseGet(Mono::empty))
莫回无
TA贡献1865条经验 获得超7个赞
Mono 具有justOrEmpty
可以与Optional<? extends T>
类型一起使用的方法。当Optional.empty() == true
我们有MonoEmpty
.
创建一个新的 Mono,如果 Optional.isPresent() 则发出指定的项目,否则只发出 onComplete。
Mono<String> value = Mono.justOrEmpty(someApi.asyncCall());
MYYA
TA贡献1868条经验 获得超4个赞
怎么样:
Optional<Integer> optional = Optional.of(5);
Mono<Optional<Integer>> monoWithOptional = Mono.just(optional);
Mono<Integer> monoWithoutOptional = monoWithOptional.flatMap(Mono::justOrEmpty);
添加回答
举报
0/150
提交
取消