如果条件为真,则立即调用方法
Calling a method immediately if the condition is true
我有一个 IStrategy 接口如下:
public interface IStrategy {
Mono<Tuple2<Response, String>> add(final String aString);
Mono<Boolean> isApplicable(final String aString);
}
然后,还有很多类实现了之前的接口。 IStrategy
接口的每个实现调用不同的 WS。
例如这是一个 Strategy1
:
public class Strategy1 implements IStrategy {
@Override
public Mono<Boolean> isApplicable(String aString) {
/*
do some checks and returns
Mono.just(Boolean.TRUE) or
Mono.just(Boolean.FALSE)
*/
@Override
public Mono<Tuple2<Response, String>> add(String aString) {
/*
Calls WS 1 and returns a response
*/
}
}
这是另一个在 add 方法中调用不同 WS 的策略:
public class Strategy2 implements IStrategy {
@Override
public Mono<Boolean> isApplicable(String aString) {
/*
do some checks and returns
Mono.just(Boolean.TRUE) or
Mono.just(Boolean.FALSE)
*/
@Override
public Mono<Tuple2<Response, String>> add(String aString) {
/*
Calls WS 2 and returns a response
*/
}
}
通过检查 isApplicable
方法,您可以确定要调用哪个 add
方法。
因此,例如:
List<IStrategy> strategiesList = new ArrayList<>(Arrays.asList(strategy1, strategy2, strategy3);
return Flux.fromIterable(strategiesList)
.filterWhen(iStrategy -> iStrategy.isApplicable(aString))
.single()
.flatMap(iStrategy -> iStrategy.add(aString));
使用前面的代码片段,调用所有 isApplicable
方法。然后 single
语句应用于 select 唯一尊重 isApplicable
.
的 iStrategy
我想调用 isApplicable
方法,如果它 returns 是一个真正的 Mono,直接调用 add
方法,而不调用所有 isApplicable(s)
第一的。
当isApplicable
方法为真时,可以立即调用add
方法。
这就是您要查找的内容:
return Flux.fromIterable(strategiesList)
.filterWhen(iStrategy -> iStrategy.isApplicable(aString))
.next()
.flatMap(iStrategy -> iStrategy.add(aString));
next()
方法发出由 Flux
发出的第一个项目。
我有一个 IStrategy 接口如下:
public interface IStrategy {
Mono<Tuple2<Response, String>> add(final String aString);
Mono<Boolean> isApplicable(final String aString);
}
然后,还有很多类实现了之前的接口。 IStrategy
接口的每个实现调用不同的 WS。
例如这是一个 Strategy1
:
public class Strategy1 implements IStrategy {
@Override
public Mono<Boolean> isApplicable(String aString) {
/*
do some checks and returns
Mono.just(Boolean.TRUE) or
Mono.just(Boolean.FALSE)
*/
@Override
public Mono<Tuple2<Response, String>> add(String aString) {
/*
Calls WS 1 and returns a response
*/
}
}
这是另一个在 add 方法中调用不同 WS 的策略:
public class Strategy2 implements IStrategy {
@Override
public Mono<Boolean> isApplicable(String aString) {
/*
do some checks and returns
Mono.just(Boolean.TRUE) or
Mono.just(Boolean.FALSE)
*/
@Override
public Mono<Tuple2<Response, String>> add(String aString) {
/*
Calls WS 2 and returns a response
*/
}
}
通过检查 isApplicable
方法,您可以确定要调用哪个 add
方法。
因此,例如:
List<IStrategy> strategiesList = new ArrayList<>(Arrays.asList(strategy1, strategy2, strategy3);
return Flux.fromIterable(strategiesList)
.filterWhen(iStrategy -> iStrategy.isApplicable(aString))
.single()
.flatMap(iStrategy -> iStrategy.add(aString));
使用前面的代码片段,调用所有 isApplicable
方法。然后 single
语句应用于 select 唯一尊重 isApplicable
.
我想调用 isApplicable
方法,如果它 returns 是一个真正的 Mono,直接调用 add
方法,而不调用所有 isApplicable(s)
第一的。
当isApplicable
方法为真时,可以立即调用add
方法。
这就是您要查找的内容:
return Flux.fromIterable(strategiesList)
.filterWhen(iStrategy -> iStrategy.isApplicable(aString))
.next()
.flatMap(iStrategy -> iStrategy.add(aString));
next()
方法发出由 Flux
发出的第一个项目。