Assume I want to send multiple database queries (or webservice requests) in parallel, and aggregate them afterwards. Would I better use the stream API or CompletableFuture?
STREAM:
List<Result> result = requests.parallelStream()
.map(req -> query(req.getFirstname, req.getLastname))
.collect(toList());
//a database, or a webservice
private Result query(firstname, lastname);
FUTURES:
List<CompletableFuture> futures;
for (QueryReq req: requests) { //given input
futures.add(CompletableFuture
.supplyAsync(() -> query(req.getFirstname, req.getLastname));
}
//wait for all futures to complete and collect the results
List<Result> results = new ArrayList<>();
for (CompleteableFuture f : futures) {
results.add(f.get());
}
While stream is certainly less verbose, but which one should be preferred for what reasons?
Sidenote: I know I could query this example easier with sql = :firstname IN (..) and ... :lastname IN(..). But it's just an example about wether to use stream or futures.
The task could as well be to send multiple webservice requests in parallel, instead of db queries.