Сейчас у меня есть такой код:
Код: Выделить всё
try (var cursor = query().fetchSize(1000).fetchLazy()) {
cursor.formatCSV(out);
}
Делает именно то, что я хочу — лениво извлекает (мои результаты огромны и никогда не помещаются в памяти) и правильно форматирует CSV.
Однако теперь мне нужно предварительно обработать записи таким образом, чтобы некоторые записи были разделены на множество.
Аналогично:
Код: Выделить всё
try (var stream = query().fetchSize(1000).stream()) {
stream
.mapMulti(...) //split the records as needed
.forEach(r -> r.formatCSV(out));
}
но здесь есть ряд проблем. Во-первых, я получу заголовок либо напечатанным для каждой строки, либо никогда, в зависимости от передаваемого формата. Кроме того, вызов formatCSV() для записи сначала помещает запись в Result, что в моем случае означает выделение десятков миллионов объектов практически даром.
Как я могу решить эти проблемы?