有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如果条件为真,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) 个答案