Java 在项目反应器中处理来自Mono的可选值
我想要一个调用另一个异步方法的Java 在项目反应器中处理来自Mono的可选值,java,reactive-programming,project-reactor,Java,Reactive Programming,Project Reactor,我想要一个调用另一个异步方法的Mono,该方法将可选的类型返回到: 如果可选不为空,则有一个值 如果可选值为空,则为单空 我现在做的是: Mono.fromCallable(()->someApi.asyncCall()) .filter(可选::isPresent) .map(可选::get) 显然,这并不理想,因为它在可调用完成后使用了两个运算符。如果可能,我希望使用Mono.empty()或内部fromCallable中的Mono值 实现我想要的东西的最佳方法是什么?有一种替代方法,使
Mono
,该方法将可选的类型返回到:
如果可选
不为空,则有一个值
如果可选值为空,则为单空
我现在做的是:
Mono.fromCallable(()->someApi.asyncCall())
.filter(可选::isPresent)
.map(可选::get)
显然,这并不理想,因为它在可调用完成后使用了两个运算符。如果可能,我希望使用Mono.empty()
或内部fromCallable
中的Mono值
实现我想要的东西的最佳方法是什么?有一种替代方法,使用flatMap
比可选方法要好一点。isPresent
和可选方法。get
可能会导致意外调用get on empty可选方法:
Mono.fromCallable(() -> someApi.asyncCall())
.flatMap(optional -> optional.map(Mono::just).orElseGet(Mono::empty))
那么:
Optional<Integer> optional = Optional.of(5);
Mono<Optional<Integer>> monoWithOptional = Mono.just(optional);
Mono<Integer> monoWithoutOptional = monoWithOptional.flatMap(Mono::justOrEmpty);
Optional=Optional.of(5);
Mono monoWithOptional=Mono.just(可选);
Mono monoWithoutOptional=monoWithOptional.flatMap(Mono::justOrEmpty);
Mono有justOrEmpty
方法,你可以使用选项。你可以看看:Mono.fromCallable(()->someApi.asyncCall()).flatMap(Mono::justOrEmpty)
这里的问题是你可以立即调用someApi.asyncCall()
。接受的答案是更好的解决方案。我检查了源代码<代码>someApi.asyncCall()
立即被调用。不懒惰。期望是-mono不应该执行任何操作,除非有人订阅,也许你是对的
Mono<String> value = Mono.justOrEmpty(someApi.asyncCall());