Иногда я оказываюсь в ситуации, когда мне приходится выполнять некоторые асинхронные задачи и выполнять другую асинхронную задачу, когда все эти задачи будут выполнены. Как всегда в таких ситуациях, я искал stackoverflow для получения инструкции, и самый рейтинговый ответ предлагает следующее решение:
Это решение полностью работает, и оно хорошее. Однако, если вы часто имеете дело с Streams
, более функциональный подход был бы аккуратным. Итак, я начал кодировать Сборщик
это делает эту операцию для меня за один раз. Я не буду вдаваться в подробности того, как работает Collector
, но этот пост в блоге очень помог мне понять это.
Наконец я получил это решение, которое я загрузил в github :
И вот как вы могли бы его использовать:
Счастливого кодирования!
Обновление
Очевидно, вчера было поздно D: Решение, которое я опубликовал, было скрыто в другом ответе с меньшим количеством голосов. Он предлагает использовать Collectors.collect, А затем
вместе с описанным выше методом последовательности. На мой взгляд, это чище, чем следовать моему подходу с написанием Collector
самостоятельно (СУХОЙ принцип). Окончательное решение опубликовано ниже, и оно содержит другой метод Collector
-factory, который можно использовать, если вас не интересуют результаты или Завершаемые варианты
для сбора имеют тип Пустота
.
Оригинал: “https://dev.to/jklingsporn/complete-a-stream-of-completablefutures-3c3”