Чем thenCompose отличается от thenApply в CompletableFuture?
thenApply — как map: функция значение → значение. thenCompose — как flatMap: функция значение → новый CompletableFuture, результат «разворачивается». Без thenCompose получилось бы CompletableFuture<CompletableFuture<T>>.
- thenCombine — объединить два независимых future
- allOf и anyOf — группа
- То же различие, что у Optional.map и flatMap, Stream.map и flatMap
А ещё Шаг асинхронный (запрос к сервису) — thenCompose
Подробно
CompletableFuture<User> user = findUser(id);
// thenApply: синхронное преобразование
CompletableFuture<String> name = user.thenApply(User::name);
// thenApply с асинхронной функцией — вложенный тип
CompletableFuture<CompletableFuture<List<Order>>> bad = user.thenApply(u -> loadOrders(u));
// thenCompose: разворачивает
CompletableFuture<List<Order>> orders = user.thenCompose(u -> loadOrders(u));
Правило: если функция возвращает обычное значение — thenApply, если CompletionStage — thenCompose.
Для двух независимых запросов последовательная цепочка через thenCompose медленнее, чем запуск обоих сразу и thenCombine — время складывается, а не берётся максимум.
Что хотят услышать
- Аналогия map и flatMap.
- Пример с вложенным типом.
- thenCombine для независимых операций.
Частые ошибки
- Использовать thenApply там, где функция возвращает CompletableFuture (получится вложенность).
- Путать thenCompose с thenCombine.
Проверьте себя
Один верный вариант. Подумайте, потом откройте ответ.
Показать варианты и ответ
- ✗Они идентичны, thenCompose — устаревший псевдоним thenApply
- ✗thenApply выполняется асинхронно, а thenCompose — синхронно
- ✗thenCompose объединяет два независимых future в пару результатов, как zip
- ✓thenApply работает как map, thenCompose — как flatMap
Что спросят дальше
- Когда брать allOf, а когда anyOf?
- Чем thenCombine отличается от thenCompose?
Разбор темы
- Future и CompletableFuture
Ограничения Future, асинхронная композиция CompletableFuture, async-варианты с пулами и обработка ошибок.
Связанные вопросы
Разбор собеседования с sotto
После собеседования sotto разбирает разговор: оценка, каждый вопрос — хорошо, частично или слабо, чего не хватило в ответе и над чем поработать к следующему разу. Первые 30 минут бесплатно.