从 Consumer 转移到 CompletableFuture
Transpose from Consumer to CompletableFuture
我目前使用的是 API,很遗憾,我无法轻易更改它。这个 API 有一些这样的方法:
public void getOffers(Consumer<List<Offer>> offersConsumer) {
final Call<List<Offer>> offers = auctionService.getOffers();
handleGetOffers(offersConsumer, offers);
}
这是一个使用改造的网络 api,它使我能够处理消费者的响应,但我更愿意使用 CompletableFutures。
我正在使用从该端点接收到的数据在游戏中构建一个界面,从而构建一个清单,它基本上充当 api 的前端。我想做的是让我的组合方法等待消费者完成,然后提供处理后的结果。这是我到目前为止所拥有的,但我不知道如何从消费者到 CompletableFuture 的步骤:
@Override
public CompletableFuture<Inventory> get(Player player) {
return CompletableFuture.supplyAsync(() -> {
auctionAPI.getOffers(offers -> {
//process the offers, then return the result of the processing, in form of an "Inventory"-Object.
}
});
});
}
我现在需要return收到所有项目并进行处理后的处理结果。我怎样才能做到这一点?
沿线的东西应该有效:
@Override
public CompletableFuture<Inventory> get(Player player) {
CompletableFuture<Inventory> result = new CompletableFuture<>();
CompletableFuture.supplyAsync(() -> {
auctionAPI.getOffers(offers -> {
//process the offers, then return the result of the processing, in form of an "Inventory"-Object.
result.complete(inventory);
}
});
return null;
});
return result;
}
我目前使用的是 API,很遗憾,我无法轻易更改它。这个 API 有一些这样的方法:
public void getOffers(Consumer<List<Offer>> offersConsumer) {
final Call<List<Offer>> offers = auctionService.getOffers();
handleGetOffers(offersConsumer, offers);
}
这是一个使用改造的网络 api,它使我能够处理消费者的响应,但我更愿意使用 CompletableFutures。
我正在使用从该端点接收到的数据在游戏中构建一个界面,从而构建一个清单,它基本上充当 api 的前端。我想做的是让我的组合方法等待消费者完成,然后提供处理后的结果。这是我到目前为止所拥有的,但我不知道如何从消费者到 CompletableFuture 的步骤:
@Override
public CompletableFuture<Inventory> get(Player player) {
return CompletableFuture.supplyAsync(() -> {
auctionAPI.getOffers(offers -> {
//process the offers, then return the result of the processing, in form of an "Inventory"-Object.
}
});
});
}
我现在需要return收到所有项目并进行处理后的处理结果。我怎样才能做到这一点?
沿线的东西应该有效:
@Override
public CompletableFuture<Inventory> get(Player player) {
CompletableFuture<Inventory> result = new CompletableFuture<>();
CompletableFuture.supplyAsync(() -> {
auctionAPI.getOffers(offers -> {
//process the offers, then return the result of the processing, in form of an "Inventory"-Object.
result.complete(inventory);
}
});
return null;
});
return result;
}