CompletableFuture.thenCombine()
Объединяет результаты двух независимых задач, когда готовы обе.
Доступно с: Java 8
Синтаксис
<U, V> CompletableFuture<V> thenCombine(CompletionStage<? extends U> other, BiFunction<? super T, ? super U, ? extends V> fn)Параметры
| Параметр | Тип | Описание |
|---|---|---|
| other | CompletionStage<? extends U> | Вторая независимая задача. |
| fn | BiFunction<? super T, ? super U, ? extends V> | Объединяет оба результата. |
Возвращаемое значение
CompletableFuture<V>Результат объединения.
Примеры
Цена и курс загружаются параллельно:
void main() {
var price = CompletableFuture.supplyAsync(() -> 120.0);
var rate = CompletableFuture.supplyAsync(() -> 0.92);
double inEuro = price.thenCombine(rate, (p, r) -> p * r).join();
IO.println(inEuro);
}Результат:
110.4Примечания
Обе задачи выполняются одновременно, общее время — как у самой долгой. Для произвольного числа задач используйте CompletableFuture.allOf(...), а затем join() каждой.
См. также
- CompletableFuture.thenApply() — Добавляет шаг, который преобразует результат, когда тот будет готов.
- CompletableFuture.supplyAsync() — Запускает вычисление асинхронно и возвращает `CompletableFuture`.
- BiFunction — Функция двух аргументов.
Вопросы и ответы по теме
В учебнике
- CompletableFuture — Асинхронные цепочки в Java — CompletableFuture.supplyAsync, thenApply, thenAccept, thenCombine, allOf, обработка ошибок через exceptionally и join.