Возврат CompletableFutureиз CompletableFuture - PullRequest
0 голосов
/ 05 марта 2019

У меня есть метод, который возвращает объект CompletableFuture<HttpResponse<GetConnectedServicesResponse>>.

GetConnectedServicesResponse класс имеет атрибут List<ConnectedService> connectedServices;

ConnectedService класс имеет атрибут String name;

Я хочу написать метод, который возвращает CompletableFuture<List<String>>, где String - это name каждого ConnectedService

. Я написал следующий метод, но изо всех сил стараюсь его завершить.

 private CompletableFuture<Optional<List<String>>> getConnectedServicesFromVpi(String vpi) {
    List<ConnectedService> connectedServices;
    connectedServiceFleetManagerClient.getConnectedServices(vpi)
            .thenApply(x -> x.payload())
            .thenApply(y -> y.map(x -> x.getConnectedServices()))
            .thenApply()

}

На изображении ниже вы также можете видеть типы объектов, которые я получаю из своей реализации.

enter image description here

1 Ответ

0 голосов
/ 05 марта 2019

Мне удалось закончить это с помощью следующего кода.

 private CompletableFuture<List<String>> getConnectedServicesFromVpi(String vpi) {
    CompletableFuture<GetConnectedServicesResponse> getConnectedServicesResponseCompletableFuture =
            connectedServiceFleetManagerClient.getConnectedServices(vpi)
            .thenApply(x ->
                    x.payload().get());

    return getConnectedServicesResponseCompletableFuture.handle(this::handle); 
}

private List<String> handle (GetConnectedServicesResponse getConnectedServicesResponse, Throwable throwable) {
    return getConnectedServicesResponse
            .getConnectedServices()
            .stream()
            .map(ConnectedService::getName)
            .collect(Collectors.toList());
}
...