У меня есть поток Java неопределенной длины.Теперь мне нужно загрузить метаданные из базы данных и назначить их потоковым данным.
Я не могу:
- загрузить все данные из потока в мою оперативную память сразу, заполнить метаданные и затем запустить новый поток, так как это может использовать много оперативной памяти.
- загружайте метаданные для каждого элемента индивидуально, так как это приведет к переполнению моей базы данных слишком большим количеством запросов.
Таким образом, я подумал, что могу загрузить метаданные в разделах из базы данных.
Мне нужен такой метод:
<T> Stream<List<T>> partition(Stream<T> stream, int partitionSize)
, поэтому я могу использовать его следующим образом:
partition(dataSource.stream(), 1000)
.map(metadataSource::populate)
.flatMap(List::stream)
.forEach(this::doSomething);
Я уже нашел Iteralbes # раздел Guava но это заставило бы меня преобразовать поток в итеративный, разделить его и снова преобразовать в поток.Есть ли что-то встроенное для разделения потока или есть простой способ реализовать это самостоятельно?