Senior
How to solve a report generation function that makes 4 independent REST requests in parallel and collects results?
sobes.tech AI
Answer from AI
To perform 4 independent REST requests in parallel and collect the results in Java, you can use CompletableFuture. This allows you to run requests asynchronously and wait for their completion, gathering all responses.
Example:
import java.net.http.*;
import java.net.URI;
import java.util.concurrent.*;
import java.util.*;
public class ReportGenerator {
private static final HttpClient client = HttpClient.newHttpClient();
public static List<String> generateReport() throws Exception {
List<String> urls = List.of(
"https://api.example.com/data1",
"https://api.example.com/data2",
"https://api.example.com/data3",
"https://api.example.com/data4"
);
List<CompletableFuture<String>> futures = new ArrayList<>();
for (String url : urls) {
HttpRequest request = HttpRequest.newBuilder()
.uri(URI.create(url))
.GET()
.build();
CompletableFuture<String> future = client.sendAsync(request, HttpResponse.BodyHandlers.ofString())
.thenApply(HttpResponse::body);
futures.add(future);
}
// Wait for all requests to complete and collect results
CompletableFuture<Void> allDone = CompletableFuture.allOf(futures.toArray(new CompletableFuture[0]));
allDone.join();
List<String> results = new ArrayList<>();
for (CompletableFuture<String> future : futures) {
results.add(future.get());
}
return results;
}
}
This approach is efficient because requests are executed in parallel, reducing the waiting time to the maximum duration of a single request.