Назад к вопросам
Senior
6
Нужно написать функцию генерации отчёта, которая делает 4 независимых REST-запроса параллельно и собирает результаты. Как решить?
Компании, где спрашивали
ТБанк
Ответ от нейросети
sobes.tech AI
Для параллельного выполнения 4 независимых REST-запросов и сбора результатов в Java можно использовать CompletableFuture. Это позволяет запускать запросы асинхронно и дождаться их завершения, собрав все ответы.
Пример:
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);
}
// Ждем завершения всех запросов и собираем результаты
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;
}
}
Такой подход эффективен, так как запросы выполняются параллельно, и время ожидания сокращается до максимального времени одного из запросов.