java 反应堆 filterAndMap?
java reactor filterAndMap?
我想用reactor实现:
for (val worker : getWorkers(request)) {
val response = worker.tryDo(work);
if (response != null) {
return response;
}
}
return null;
getWorkers
可以转returnFlux<Worker>
,tryDo
也可以return单声道
关键是我只想要一个或零个响应,只有在当前 worker.tryDo
失败时才尝试下一个。
我需要哪个运营商?我在 document.
中找不到答案
假设您可以将 tryWork 重做为 return 一个在没有工作时为空的 Mono 而不是 returning null,您可以使用 getWorkers(request).flatMap(worker -> worker.tryDo(work), 1).next()
1
参数 flatMap
指示它只考虑 1 对 1 的工人。
return 个空单声道的工作人员实际上不会影响 flatMap 的输出。
Flux.next()
通过丢弃第一个元素之后的元素并取消源来转换为 Mono
。
我在 gitter 中找到了答案,来自@OlegDokuka:
Mono.fromDirect(workersFlux.concatMap(worker ->
Mono.justOrEmpty(worker.tryDo(work))).take(1))
更新:
感谢@Simon Baslé:使用 singleOrEmpty
而不是 fromDirect
。
workersFlux.concatMap(worker -> Mono.justOrEmpty(worker.tryDo(work))).take(1).singleOrEmpty()
我想用reactor实现:
for (val worker : getWorkers(request)) {
val response = worker.tryDo(work);
if (response != null) {
return response;
}
}
return null;
getWorkers
可以转returnFlux<Worker>
,tryDo
也可以return单声道
关键是我只想要一个或零个响应,只有在当前 worker.tryDo
失败时才尝试下一个。
我需要哪个运营商?我在 document.
中找不到答案假设您可以将 tryWork 重做为 return 一个在没有工作时为空的 Mono 而不是 returning null,您可以使用 getWorkers(request).flatMap(worker -> worker.tryDo(work), 1).next()
1
参数 flatMap
指示它只考虑 1 对 1 的工人。
return 个空单声道的工作人员实际上不会影响 flatMap 的输出。
Flux.next()
通过丢弃第一个元素之后的元素并取消源来转换为 Mono
。
我在 gitter 中找到了答案,来自@OlegDokuka:
Mono.fromDirect(workersFlux.concatMap(worker ->
Mono.justOrEmpty(worker.tryDo(work))).take(1))
更新:
感谢@Simon Baslé:使用 singleOrEmpty
而不是 fromDirect
。
workersFlux.concatMap(worker -> Mono.justOrEmpty(worker.tryDo(work))).take(1).singleOrEmpty()