nan*_*oft 7 java lambda functional-programming reactive-programming
我有一个接受Mono作为参数的方法.我想要的只是从中获取实际的String.谷歌搜索,但没有找到答案,除了在Mono对象上调用block(),但它会进行阻塞调用,所以想避免使用block().如果可能,请建议其他方式. 我需要这个String的原因是因为在这个方法中我需要调用另一个方法,比如print()和实际的String值.我明白这很容易,但我是反应式编程的新手.
码:
public String getValue(Mono<String> monoString)
{
// How to get actual String from param monoString
//and call print(String) method
}
public void print(String str)
{
System.out.println(str);
}
Run Code Online (Sandbox Code Playgroud)
Ale*_*nov 20
String从一个Mono<String>没有阻塞的电话获得一个并不容易,这是不可能的.根据定义.如果String尚未提供(Mono<String>允许),除非等到它进入,否则你无法获得它,而这正是阻塞所在.
而不是"得到一个String"你subscribe的Mono和Subscriber你通过将获得String当它(立即也许)变为可用.例如
myMono.subscribe(
value -> Console.out.println(value),
error -> error.printStackTrace(),
() -> Console.out.println("completed without a value")
)
Run Code Online (Sandbox Code Playgroud)
将打印由myMono(类型为valueis String,type of erroris Throwable)产生的值或错误.在https://projectreactor.io/docs/core/release/api/reactor/core/publisher/Mono.html,您也可以看到其他变体subscribe.
ΦXo*_*a ツ 12
根据文档你可以这样做:
String getValue(Mono<String> mono) {
return mono.block();
}
Run Code Online (Sandbox Code Playgroud)
注意阻塞调用
最后对我有用的是调用 flatMap 方法,如下所示:
public void getValue(Mono<String> monoString)
{
monoString.flatMap(this::print);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
23012 次 |
| 最近记录: |