ber*_*zie 5 java reactive-programming project-reactor
我想有一个Mono调用另一个异步方法,该方法将Optional类型返回给:
Optional不为空,则有一个值,MonoEmpty如果该Optional值为空。这是我现在所做的:
Mono.fromCallable(() -> someApi.asyncCall())
.filter(Optional::isPresent)
.map(Optional::get)
显然,这不是理想的,因为在可调用函数完成之后它使用两个运算符。如果可能的话,我想Mono.empty()从内部获取or或mono值fromCallable。
实现我想要的最好的方法是什么?
sli*_*hyi 14
Mono 有justOrEmpty可以与类型一起使用的方法Optional<? extends T>。当Optional.empty() == true我们有的时候MonoEmpty。
创建一个新的 Mono,如果Optional.isPresent() 则发出指定的项目,否则仅发出 onComplete。
Mono<String> value = Mono.justOrEmpty(someApi.asyncCall());
Run Code Online (Sandbox Code Playgroud)
还有一个替代方案,flatMap它比更好,Optional.isPresent并且Optional.get可能导致意外调用get on empty Optional:
Mono.fromCallable(() -> someApi.asyncCall())
.flatMap(optional -> optional.map(Mono::just).orElseGet(Mono::empty))
Run Code Online (Sandbox Code Playgroud)
怎么样:
Optional<Integer> optional = Optional.of(5);
Mono<Optional<Integer>> monoWithOptional = Mono.just(optional);
Mono<Integer> monoWithoutOptional = monoWithOptional.flatMap(Mono::justOrEmpty);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1550 次 |
| 最近记录: |