Java 8 在CompletableFuture上使用java 8 api流时发生编译错误

Java 8 在CompletableFuture上使用java 8 api流时发生编译错误,java-8,completable-future,Java 8,Completable Future,这项工作: public Long getMaxSalary(List<CompletableFuture<EmployeeData>> futures) { CompletableFuture<Void> allDoneFuture = CompletableFuture.allOf(futures.toArray(new CompletableFuture[futures.size()])); CompletableFuture<List<E

这项工作:

public Long getMaxSalary(List<CompletableFuture<EmployeeData>> futures) {

CompletableFuture<Void> allDoneFuture = CompletableFuture.allOf(futures.toArray(new CompletableFuture[futures.size()]));
CompletableFuture<List<EmployeeData>> employeeDataList = allDoneFuture.thenApply(v ->
                            futures.stream()
                                    .map(f -> f.join())
                                    .collect(Collectors.toList()));

List<EmployeeData> rc = employeeDataList.get();
OptionalLong op = rc.stream().mapToLong(r -> r.salary()).max();
return op.getAsLong();


}
public Long getMaxSalary(列表期货){
CompletableFuture allDoneFuture=CompletableFuture.allOf(futures.toArray(新的CompletableFuture[futures.size());
CompletableFuture employeeDataList=allDoneFuture。然后应用(v->
futures.stream()
.map(f->f.join())
.collect(Collectors.toList());
List rc=employeeDataList.get();
OptionalLong op=rc.stream().mapToLong(r->r.salary()).max();
返回操作getAsLong();
}
试图在IDE中抛出编译器错误来简化此操作。我想不出是什么错误。我正在尝试将它合并到一个流中

    public Long getMaxSalary(List<CompletableFuture<EmployeeData>> futures) {

    CompletableFuture<Void> allDoneFuture = CompletableFuture.allOf(futures.toArray(new CompletableFuture[futures.size()]));

    return allDoneFuture.thenApply(v ->
                                futures.stream()
                                        .map(f -> f.join())
                                        .mapToLong(r -> r.salary())
                                        .max()).getAsLong();

    }
public Long getMaxSalary(列表期货){
CompletableFuture allDoneFuture=CompletableFuture.allOf(futures.toArray(新的CompletableFuture[futures.size());
返回allDoneFuture。然后应用(v->
futures.stream()
.map(f->f.join())
.mapToLong(r->r.salary())
.max()).getAsLong();
}
试试这个

return allDoneFuture.thenApply(v -> futures.stream().map(f -> f.join())).get()
        .mapToLong(empData -> empData.salary()).max().getAsLong();
试试这个

return allDoneFuture.thenApply(v -> futures.stream().map(f -> f.join())).get()
        .mapToLong(empData -> empData.salary()).max().getAsLong();

如果要用立即的
.get()阻止当前线程,那么使用
allOf
thenApply
是没有意义的


如果您希望返回
CompletableFuture
,并让方法的客户端决定何时在哪个线程中等待完成,那么
allOf
方法将非常有用

如果要立即使用
.get()


如果您希望返回
CompletableFuture
,并让方法的客户端决定何时在哪个线程中等待完成,那么
allOf
方法将非常有用

thenApply
返回一个
CompletableFuture
,它没有
getAsLong()
方法。您可能需要
.join().getAsLong()
,但是,在阻止当前线程时,这些都是不必要的。顺便说一下,有一种行为是将一个预先大小的数组传递给
集合。toArray
然后Apply
返回一个
可完成的未来
,它没有
getAsLong()
方法。您可能需要
.join().getAsLong()
,但是,在阻止当前线程时,这些都是不必要的。顺便说一句,这里有一个关于将预先大小的数组传递给
集合的行为。toArray
…您不是在这里等待吗。我没有看到调用
.get()
。顺便说一句,allOf
返回CompletetableFuture。如果你无论如何都要等待,不要麻烦
allOf
,只要在所有期货上使用
join
。你不是在这里等待吗。我没有看到调用
.get()
。顺便说一句,allOf返回CompletetableFuture。如果您仍要等待,请不要费心于
allOf
,只需在所有期货上使用
join