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.