CompletableFuture - 如何在未来结果中使用局部变量

CompletableFuture - How to Use Local Variable in a Future Result

我在 java 应用程序中使用 CompletableFuture。在以下代码中:

testMethod(List<String> ids)  {

    for(String id : ids) {
        CompletableFuture<Boolean> resultOne = AynchOne(id);
        CompletableFuture<Boolean> resultTwo = AynchTwo(id);
    
CompletableFuture<Boolean> resultThree = resultOne.thenCombine(resultTwo, (Boolean a, Boolean b) -> {
     Boolean andedResult = a && b;
     return andedResult;
    });

resultThree.thenApply(andedResult -> {
     if(andedResult.booleanValue() == true) {
         forwardSucccess(**id**);
      }
      return null;
    });
}

}


void forwardSucccess(String id) {
    // do stuff in the future
}

,“id”是 testMethod() 本地的,因此我不相信未来的上下文(在 thenApply())。我在您看到 forwardSuccess(id) 的代码片段中有它,但由于它不是期货的一部分,因此在执行“forwardSuccess(id)”时它可能为 null 或未定义。

有没有办法以某种方式将“id”引入期货?

感谢任何想法。

我的原始编码接近正确。变量“id”的值在未来是正确的,因为它在 for-loop 上下文中的值被 CompletableFuture 的魔法自动转发。如果这对其他人来说很明显,但对我来说却不是(这就是我发帖的原因!)。

除此之外,我还简化了一些逻辑(基于上面 Holger 先生的有用评论)。

testMethod(List<String> ids)  {

    for(String id : ids) {
        CompletableFuture<Boolean> resultOne = AynchOne(id);
        CompletableFuture<Boolean> resultTwo = AynchTwo(id);

        CompletableFuture<Boolean> resultThree = resultOne.thenCombine(resultTwo, (a,b) -> a && b); 

    resultThree.thenApply(andedResult -> {
        if(andedResult == true) {
            forwardSucccess(id);
        }
        return null;
    });
}


void forwardSucccess(String id) {
    // do stuff in the future
}