Java 将一个以上的可完成未来应用于另一个可完成未来的结果的最佳方式是什么?

Java 将一个以上的可完成未来应用于另一个可完成未来的结果的最佳方式是什么?,java,completable-future,Java,Completable Future,我们来举个例子: 我们有四种方法: CompletableFututre<Void> loadAndApply(SomeObject someObject); CompletableFuture<SomeData> loadData(); A processA(SomeData data); B processB(SomeData data); 有什么方法看起来比实际不在给定对象上应用任何内容并在下一个将来返回它的applyAsync更好吗?您可以结合使用。thenco

我们来举个例子: 我们有四种方法:

CompletableFututre<Void> loadAndApply(SomeObject someObject);
CompletableFuture<SomeData> loadData();
A processA(SomeData data);
B processB(SomeData data);

有什么方法看起来比实际不在给定对象上应用任何内容并在下一个将来返回它的
applyAsync
更好吗?

您可以结合使用。
thencomose
使用的
函数的通用签名是:
函数不确定是否正确理解了您的问题,但您不能将
loadData()
中的未来存储在局部变量中,并对其调用两次
theneacceptsync()
。@didierr是的,这是选项之一,但是我正在寻找一种方法,一个接一个地调用方法(有点像一行程序),而不使用任何辅助变量
CompletableFututre<Void> loadAndApply(SomeObject someObject) {
    return loadData()
      .thenApplyAsync(data -> { someObject.setA(processA(data)); return data; }, swingExecutor)
      .thenAcceptAsync(data -> someObject.setB(processB(data)), backgroundExecutor);
}
public CompletableFuture<Void> loadAndApply(SomeObject object) {
  return loadData().thenCompose(data ->
      CompletableFuture.allOf(
          CompletableFuture.runAsync(() -> object.setA(processA(data)), swingExecutor),
          CompletableFuture.runAsync(() -> object.setB(processB(data)), backgroundExecutor)
      ) // End of "allOf"
  ); // End of "thenCompose"
} // End of "loadAndApply"