如何在反应堆中进行类似“选择案例”的操作

时间:2019-03-19 04:49:50

标签: project-reactor reactor

我正在制作一个不和谐的bot,它需要读取参数列表,并在给出第一个参数的情况下,让它确定要运行的分支。

有点像这样。

Mono.just(stringList)
.ifSelectmap(conditional1, branch1)
.ifSelectmap(conditional2, branch2)
.ifSelectmap(conditional3, branch3)
// non branch logic here

我想出做这样的事情的唯一方法只会导致几个深度嵌套的switchIfEmpty语句。很难管理。

1 个答案:

答案 0 :(得分:0)

如果条件逻辑不涉及大量等待时间的操作(即执行IO),那么将更加充实的Function传递给map / flatMap并没有什么错。 我将假设您的“分支”实际上是表示为Mono<R>Flux<R>的异步操作(也就是说,所有分支共享相同的返回类型R),因此我们正在谈论flatMap

Flux<V> source; //...
Flux<R> result = source.flatMap(v -> {
    if (conditional1) return branch1(v);
    if (conditional2) return branch2(v);
    if (conditional3) return branch3(v);
    return Mono.empty(); //no conditional match == ignore
    //you might want a default processing instead for the above
};