压平Java期货

Dan*_*ood 5 java future java-8

我有两个函数,每个函数都返回CompletebleFuture<Boolean>实例,我希望or它们进入一个有序且可短路的未来。

public CompletableFuture<Boolean> doA();
public CompletableFuture<Boolean> doB();
Run Code Online (Sandbox Code Playgroud)

非未来代码(即仅返回布尔值)将是

return doA() || doB();
Run Code Online (Sandbox Code Playgroud)

当返回类型是CompletableFuture<CompletableFuture<Boolean>>实例时,使用期货我已经达到了这一点。

doA.thenApply(b -> {
  if (!b) {
    return doB();
  } else {
    return CompletableFuture.completedFuture(b);
  }
}
Run Code Online (Sandbox Code Playgroud)

有没有办法使这个扁平化?或者,以任何方式可以使返回类型为CompletablyFuture<Boolean>

编辑:注意,能够使期货短线是我想要的功能。我知道我要依次运行计算,但是没关系。我希望运行doBdoA返回true。

nos*_*sid 5

只需使用该方法thenCompose而不是thenApply

CompletableFuture<Boolean> result = doA().thenCompose(b -> b
    ? CompletableFuture.completedFuture(Boolean.TRUE) : doB());
Run Code Online (Sandbox Code Playgroud)