gpt4 book ai didi

java - 当需要 Completable 时返回 Completable
转载 作者:行者123 更新时间:2023-12-01 19:35:10 33 4
gpt4 key购买 nike

我有以下人员类别:

class Person {
String name;
String city;
public void setInfo(PersonInformation info) {//...};
}

我有一个来自此类的对象列表,我想使用返回 CompletableFuture 的方法,异步查询列表中每个项目的数据库来填充它们的信息:

List<CompletableFuture<Void>> populateInformation(List<Person> people) {
return people.stream().
.collect(groupingBy(p -> p.getLocation(), toList()))
.entrySet().stream()
.map(entry ->
CompletableFuture.supplyAsync(
() -> db.getPeopleInformation(entry.getKey())
).thenApply(infoList -> {
//do something with info list that doens't return anything
// apparently we HAVE to return null, as callanbles have to return a value
return null;
}
)
).collect(Collectors.toList());
}

问题是我收到编译错误,因为方法中的代码返回 CompletableFuture<List<Object>>而不是CompletableFuture<List<Void>> 。我在这里做错了什么?

我想删除 return null ,但正如我在评论中提到的,似乎在可调用中我们必须返回一个值,否则会出现另一个编译错误:Incompatible types: expected not void but the lambda body is a block that is not value-compatible

最佳答案

thenApply方法返回类型为 CompletableFuture<U> ,这意味着使用函数返回的值返回 CompletableFuture

public <U> CompletableFuture<U> thenApply(Function<? super T,? extends U> fn)

返回一个新的CompletionStage当该阶段正常完成时,将使用该阶段的结果作为所提供函数的参数来执行。有关异常完成的规则​​,请参阅 CompletionStage 文档。

Type Parameters:
U - the function's return type

Parameters:
fn - the function to use to compute the value of the returned CompletionStage

使用thenAccept返回 Void 类型的 CompletableFuture 的方法

public CompletableFuture<Void> thenAccept(Consumer<? super T> action)

返回一个新的 CompletionStage,当该阶段正常完成时,将使用该阶段的结果作为所提供操作的参数来执行该阶段。有关异常完成的规则​​,请参阅 CompletionStage 文档。

Parameters:
action - the action to perform before completing the returned CompletionStage

关于java - 当需要 Completable<Void> 时返回 Completable<Object>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58033222/

33 4 0