¿Hay una manera fácil de obtener un Stream como resultado de un RowParser?

DadorowParser de tipoRowParser[Photo], así es como se analizaría una lista de filas provenientes de una tablaphotoSegún los ejemplos de código que he visto hasta ahora:

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

Donde el* operador crea un analizador de tipoResultSetParser[List[Photo]]. Ahora, me preguntaba si sería igualmente posible obtener un analizador que produzca unStream (pensar que ser más perezoso siempre es mejor), pero solo se me ocurrió esto:

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 })
}

Funciona, pero parece demasiado complicado. Yo podría, por supuesto, simplemente llamartoStream sobre elList Me sale de la primera función, pero mi objetivo era aplicar solorowParser en las filas que realmente se leen. ¿Hay una manera más fácil de lograr esto?

EDITAR: lo sélimit se debe utilizar en la consulta, si el número de filas de interés se conoce de antemano. También soy consciente de que, en muchos casos, va a utilizar todo el resultado de todos modos, por lo que ser perezoso no mejorará el rendimiento. Pero puede haber un caso en el que ahorre algunos ciclos, por ejemplo. Si, por algún motivo, tiene criterios de búsqueda que no puede o no desea expresar en SQL. Así que pensé que era extraño que, dado el hecho de que anorm proporciona una manera de obtener unStream deSqlRow, No encontré una manera directa de aplicar unRowParser en ese.

Respuestas a la pregunta(3)

Su respuesta a la pregunta