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
。