如果条件为真,java会立即调用一个方法
我有一个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
语句来选择唯一尊重isApplicable
的iStrategy
我想调用isApplicable
方法,如果它返回一个真正的Mono,直接调用add
方法,而不首先调用所有的isApplicable(s)
。
当isApplicable
方法为true时,可以立即调用add
方法
共 (0) 个答案