2010-01-22 5 views
13

Ich habe den folgenden Code auf einem Controller bekamgenerieren aus einer anderen Liste eine Liste jedes Element auf Groovy Umwandlung

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 */ 

Ich kann den Eindruck nicht fern zu halten, dass es wahrscheinlich eine Möglichkeit, ist dies in einem zu tun eleganteren Weg, etwas ähnlich eine Liste Verständnis in Python:

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

Nachdem eine leere Liste zu erklären und dann bevölkern sie die beste Art und Weise, Dinge zu tun scheinen ... Ist es möglich, mach was g so, oder Groovy erlaubt es nicht?

Antwort

0

Nun, wenn Sie Grails verwenden, warum verwenden Sie nicht einfach die Modellklasse zusammen mit der findAll-Methode?
Die Verwendung von einfachem Roh-SQL sollte in Ausnahmefällen erfolgen.

+0

Ja, das ist einer dieser Fälle ;-) Die Tabelle ist eine Ansicht, daher gibt es einige Probleme, die die Tabelle als Domäne definieren. – Khelben

9

tim_yates' Antwort eine saubere Lösung ist, wenn Sie eine Methode (oder Eigenschaft) anrufen möchten auf jedem Element der Liste, um es zB zu verwandeln:

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

aber wenn Sie eine Methode von einem anderen Objekt aufrufen möchten oder etwas komplexere Sieverwenden können:

[1, 2, 3].collect {Math.cos(it * Math.PI)} 
Verwandte Themen