我对Java的CompletableFuture相对缺乏经验,我可能需要一些帮助。这就是我想要做的。
/* 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>
所以我想知道是否有一种方法可以将第一个期货“链接”到第二个期货,以便返回一个单一的future(TypeB)。
答案 0 :(得分:2)
thenCompose
方法正是这样做的。
这里是https://www.baeldung.com/java-completablefuture的示例:
CompletableFuture<String> completableFuture = CompletableFuture.supplyAsync(() -> "Hello") .thenCompose(s -> CompletableFuture.supplyAsync(() -> s + " World")); assertEquals("Hello World", completableFuture.get());
答案 1 :(得分:0)
我们在尝试编写测试代码时遇到了类似的问题,并且必须测试的未来是在后台线程中创建的,因此我们不能简单地将它与我们想用于断言的外部未来。
我的同事创建了以下方法。
static <U> void propagateResultWhenCompleted(
final CompletionStage<U> source,
final CompletableFuture<U> target)
{
source.whenComplete((r, t) -> complete(target, r, t));
}
我想知道为什么这不在标准工具集中。这当然不是使用期货的惯用方式,但在某些情况下很方便。