Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 连锁店未来的业务_Java_Completable Future - Fatal编程技术网

Java 连锁店未来的业务

Java 连锁店未来的业务,java,completable-future,Java,Completable Future,我有几个单独的操作,我想以相同的风格链接,就像我们在JS中为Promises所做的那样 所以我现在有这样的代码: CompletableFuture<Data1> data1 = ...; CompletableFuture<Data2> data2 = ...; // Fetch in parallel! CompletableFuture.allOf( data1, data2

我有几个单独的操作,我想以相同的风格链接,就像我们在JS中为
Promises
所做的那样

所以我现在有这样的代码:

    CompletableFuture<Data1> data1 = ...;
    CompletableFuture<Data2> data2 = ...;

    // Fetch in parallel!
    CompletableFuture.allOf(
            data1,
            data2
    ).join(); // wait 2 threads to finish

    CompletableFuture<Data3> data3 = ... // i need data1 here
    data3.join();
返回一个
CompletableFuture
。它不知道givne
CompletableFuture将返回的类型:

给定的
CompletableFuture
s的结果(如果有)不会反映在返回的
CompletableFuture
中,但可以通过单独检查来获得


因此,如果您想使用它们,您必须
获取
data1
data2
的返回值。

当使用
allOf
时,无法在输入期货上调用
join
来获取依赖函数中的值(尽管您知道这些调用不会阻塞)

但是,当您正好有两个期货要组合时,就不需要使用
allOf
;您可以将它们平滑地组合在一起:

CompletableFuture<FinalResult> f = data1
    .thenCombine(data2, (result1, result2) -> another CompletableFuture)
    .thenCompose(Function.identity())
    .thenAccept(result3 -> …);
CompletableFuture f=data1
.thenCombine(数据2,(结果1,结果2)->另一个可完成的未来)
.thenCompose(Function.identity())
.然后接受(结果3->…);
然后accept
将评估将结果值映射到新结果值的函数,而
然后compose
将评估将结果值映射到新未来的函数。方法
然后combine
然后accept
的两个未来变体,允许将两个值映射到一个新值

但是,
thenCombine
没有两个未来变量,因此解决方案是将从两个中间值创建的未来视为一个值(获取未来的未来),然后是
thenCompose(Function.identity())
,以将“值”映射到未来。然后,我们可以链接一个函数来处理第三个结果,一旦未来完成

CompletableFuture<FinalResult> f = data1
    .thenCombine(data2, (result1, result2) -> another CompletableFuture)
    .thenCompose(Function.identity())
    .thenAccept(result3 -> …);