Получение результата CompletableFuture.supplyAsync - PullRequest
0 голосов
/ 23 октября 2018

У меня есть этот кусок кода:

CompletableFuture
    .supplyAsync(() -> {
        return  smsService.sendSMS(number);
    }).thenApply(result -> {
        LOG.info("SMS sended " + result);
    });

, но я получил ошибку компиляции:

Метод thenApply(Function<? super Boolean,? extends U>) в типе CompletableFuture<Boolean> не применим дляАргументы ((<no type> result) -> {})

1 Ответ

0 голосов
/ 23 октября 2018

Вы хотите использовать thenAccept, а не thenApply

thenApply принимает Function, который имеет вид

public interface Function<T, R> {
    R apply(T t);
}

thenAccept принимает Consumerкоторая имеет вид

public interface Consumer<T> {
    void accept(T t);
}

Лямбда, которую вы указали, не имеет возвращаемого значения;это пустоПоскольку параметр универсального типа не может быть пустым, ваша лямбда не может быть преобразована как Function интерфейс.С другой стороны, Consumer имеет тип возврата void, который может удовлетворить лямбда.

...