У меня есть входной поток запросов, которые выполняются асинхронно. Я хочу убедиться, что когда я использую Completablefuture::join
, результат этих требований собирается в порядке входного потока запроса.
Вот как выглядит мой код:
queries.stream()
.map(query -> CompletableFuture.supplyAsync(() -> {
try {
return SQLQueryEngine.execute(query);
} catch (InternalErrorException e) {
throw new RuntimeException(e);
}
}))
.map(CompletableFuture::join)
.collect(Collectors.toList());
SQLQueryEngine.execute(запрос); возвращает List<Results>
, поэтому вывод равен List<List<Result>
. Я хочу сгладить и объединить все результаты в один список. Если я использую .flatMap(List::stream) перед выравниванием коллекции, сохранит ли она порядок?
CompletableFuture
один за другим (присоединяйтесь к карте). Если вы хотите обрабатывать их одновременно, сопоставьте поток сList
изCompletableFutures
и вызовите для нихallOf
. Пример здесь - person Ruben   schedule 27.10.2015