Ответ
Ответ: Количество вызовов равно количеству элементов потока, которые проходят через операцию, выполняющую запрос (например, map), при условии выполнения терминальной операции.
Объяснение: Stream API сам по себе не выполняет HTTP-запросы. Запросы происходят только в функциях, явно написанных разработчиком (например, внутри map() или forEach()).
Пример:
List<String> urls = List.of("https://api.example.com/1",
"https://api.example.com/2",
"https://api.example.com/3");
// GET запрос выполнится 3 раза (по одному на каждый URL)
List<Response> responses = urls.stream()
.map(url -> httpClient.send(getRequest(url))) // Операция, выполняющая запрос
.collect(Collectors.toList()); // Терминальная операция, запускающая обработку
Важные замечания:
- Ленивые вычисления: Если терминальная операция не будет вызвана или обработает не все элементы (например,
findFirst()), запросы выполнятся только для необходимых элементов. - Параллельные стримы (
parallelStream()): Запросы могут выполняться одновременно в нескольких потоках, но их общее количество останется равным количеству обработанных элементов.