Я хотел сделать это как комментарий, но вроде был слишком большим.
Предполагает ли поток, что все элементы известны ...
Например, посмотрите на Files::lines
. Невозможно узнать точное число строк, которыев определенном файле, так что базовая реализация как-то делает это ... Для последовательного потока это легко, для параллельного - все, что они делают, это буферируют, пока не будет буферизовано по крайней мере 1024
строк (+ 1024 в следующем буфере и т. д.на).Так что да, реализация потока без известного размера абсолютно возможна, даже если этот размер может изменяться динамически - хотя это тоже приводит к множеству других проблем, IMO.
Это противоречит передовой практике потоков,что элемент запроса № 11 может завершиться с ошибкой RuntimeException, поскольку выполняется запрос новой страницы для получения элементов на следующей странице?
Не совсем уверен, что я полностью понимаю это, но, похоже, вы обеспокоенынесколько одновременных запросов к одним и тем же данным.Если так, то для меня это не нормально для потоков настолько, насколько это не нормально для просто the PageRequest
;В конце концов, вы просто читаете данные - если их там нет, возвращайте пустой список или частичный список или что-то еще, но не бросайте исключение.Если базовый PageRequest
выбрасывает это, обработайте его в обертке, которая у вас все равно будет.
Просто обратите внимание, что обычно вы можете очень легко трансформироваться из Iterator -> Stream
и Stream -> Iterator
, если это необходимо.Тем не менее, я бы придерживался подхода Stream
, если бы вы могли его реализовать.