этот код эквивалентен:
Collection<Contract> contracts = fillTheCollectionFromDb();
contracts.stream().filter(condition)
.map(this::getAnotherDataFromDb)
.collect(Collectors.toList());
Чтобы сделать эту программу действительно параллельной, ее нужно изменить.Сначала запустите все запросы к базе данных параллельно:
Collection<Contract> contracts = fillTheCollectionFromDb();
List<CompletableFuture> futures = contracts.stream().filter(condition)
.map(contractItem ->
CompletableFuture.supplyAsync(
()->getAnotherDataFromDb(contractItem),
executor)
)//end .map
.collect(Collectors.toList());
и только после этого соберите все результаты:
List results = futures.stream
.map(CompletableFuture::join)
.collect(Collectors.toList());