Когда я запрашиваю базу данных и получаю ResultSet (только для прямого доступа, только для чтения), ResultSet действует как список строк базы данных.
Я пытаюсь найти способ обработать этот ResultSet, как Scala Stream
. Это позволит выполнять такие операции, как filter
, map
и т.д., Не потребляя большие объемы ОЗУ.
Я реализовал метод tail-recursive для извлечения отдельных элементов, но для этого требуется, чтобы все элементы были в памяти одновременно, проблема, если ResultSet очень велика:
// Iterate through the result set and gather all of the String values into a list
// then return that list
@tailrec
def loop(resultSet: ResultSet,
accumulator: List[String] = List()): List[String] = {
if (!resultSet.next) accumulator.reverse
else {
val value = resultSet.getString(1)
loop(resultSet, value +: accumulator)
}
}