Есть ли простой способ получить поток как выход RowParser?

ДаноrowParser типаRowParser[Photo]это то, как вы будете анализировать список строк из таблицыphotoв соответствии с примерами кода, которые я видел до сих пор:

def getPhotos(album: Album): List[Photo] = DB.withConnection { implicit c =>
  SQL("select * from photo where album = {album}").on(
    'album -> album.id
  ).as(rowParser *)
}

Где* Оператор создает парсер типаResultSetParser[List[Photo]], Теперь мне было интересно, если бы было одинаково возможно получить парсер, который даетStream (думая, что быть ленивым всегда лучше), но я только придумал это:

def getPhotos(album: Album): Stream[Photo] = DB.withConnection { implicit c =>
  SQL("select * from photo where album = {album}").on(
    'album -> album.id
  )() collect (rowParser(_) match { case Success(photo) => photo })
}

Это работает, но кажется слишком сложным. Я мог бы, конечно, просто позвонитьtoStream наList Я получаю от первой функции, но моей целью было только применитьrowParser на строки, которые на самом деле читаются. Есть ли более простой способ добиться этого?

РЕДАКТИРОВАТЬ: я знаю, чтоlimit следует использовать в запросе, если количество интересующих строк известно заранее. Я также знаю, что во многих случаях вы все равно будете использовать весь результат, поэтому ленивость не улучшит производительность. Но может быть случай, когда вы сохраните несколько циклов, например, если по какой-то причине у вас есть критерии поиска, которые вы не можете или не хотите выражать в SQL. Так что я подумал, что это странно, учитывая тот факт, что анорм обеспечивает способ полученияStream изSqlRowЯ не нашел простой способ применитьRowParser на том.

Ответы на вопрос(3)

Ваш ответ на вопрос