Java 传递一个完整的未来';结果如何

Java 传递一个完整的未来';结果如何,java,concurrency,completable-future,Java,Concurrency,Completable Future,我对Java的完全未来相对缺乏经验,可能需要一些帮助。这就是我要做的 /* I want to use the result of the future in a second one. * So basically, what I want to do is to return the second future, * but I don't want to block and wait for the first future to complete. * / CompletableF

我对Java的完全未来相对缺乏经验,可能需要一些帮助。这就是我要做的

/* I want to use the result of the future in a second one.
 * So basically, what I want to do is to return the second future,
 * but I don't want to block and wait for the first future to complete.
 * /
CompletableFuture<TypeA> -> CompletableFuture<TypeB> 
/*我想在第二个例子中使用未来的结果。
*所以基本上,我想做的是返回第二个未来,
*但我不想阻碍和等待第一个未来的完成。
* /
CompletableFuture->CompletableFuture
因此,我想知道是否有一种方法可以将第一个未来“链接”到第二个未来,从而返回一个单一的未来(TypeB)

该方法正是这样做的

以下是一个例子:

CompletableFuture CompletableFuture
=CompletableFuture.SupplySync(()->“Hello”)
.然后组合(s->CompletableFuture.supplyAsync(()->s+“World”);
assertEquals(“你好,世界”,completableFuture.get());

还可以看看。

我们在尝试编写测试代码时遇到了类似的问题,并且必须测试的未来是在后台线程中创建的,因此我们不能简单地将其与我们想要用于断言的外部未来链接起来

我的同事创建了以下方法

static <U> void propagateResultWhenCompleted(
    final CompletionStage<U> source,
    final CompletableFuture<U> target)
{
    source.whenComplete((r, t) -> complete(target, r, t));
}
静态无效传播结果完成后(
最终完成阶段源,
最终完成(未来目标)
{
来源。当完成((r,t)->完成(目标,r,t));
}

我想知道为什么这不在标准工具集中。当然,这不是使用期货的惯用方法,但在某些情况下它很方便。

我不理解你的问题。为什么不传递future对象本身呢?
然后compose
是completablefuture的绑定。
static <U> void propagateResultWhenCompleted(
    final CompletionStage<U> source,
    final CompletableFuture<U> target)
{
    source.whenComplete((r, t) -> complete(target, r, t));
}