2010-01-22 18 views
13

Tengo el siguiente código en un controlador deGenerar una lista de otra lista transformando cada elemento en la maravillosa

def db = new Sql(dataSource) 
    def rawLines = db.rows("SELECT name FROM LINES") 
    def lines = [] 
    /*(db.rows returns the values as [NAME:value] */ 
    rawLines.each { 
     lines.add(it.name) 
    } 
    /*Then, use lines */ 

no puedo mantener lejos la impresión de que es probable que haya alguna manera de hacer esto en una forma más elegante, algo similar a una lista de comprensión de Python:

lines = [ l.name for l in db.rows("SELECT name FROM LINES") ] 

tener que declarar una lista vacía y luego rellenarlo no parece la mejor manera de hacer las cosas ... ¿es posible hacer algo g como este, o Groovy no lo permite?

Respuesta

0

Bueno, si está utilizando grails, ¿por qué no está utilizando simplemente una clase de modelo junto con el método findAll?
El uso de SQL sin formato se debe realizar en casos excepcionales.

+0

Sí, este es uno de estos casos ;-) La tabla es una vista, por lo que hay algunos problemas para definir la tabla como un dominio. – Khelben

9

tim_yates' es una solución limpia cuando se quiere llamar a un método (o propiedad) en cada elemento de la lista con el fin de transformarla por ejemplo:

[1,2,3]*.multiply(5) 

pero si desea llamar a un método de otro objeto o hacer algo más complejo que puede usar collect:

Cuestiones relacionadas