2010-01-22 72 views
13
將每個元素的列表

我有下面的代碼放在一個控制器生成從另一個列表中關於Groovy

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

我不能保持距離的印象,有可能是某種方式在做這個更優雅的方式,類似於一個列表理解的東西在Python:

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

有申報一個空列表,然後填充它似乎不做事最好方式... 是否有可能做一些事情g像這樣,還是Groovy不允許它?

回答

0

那麼,如果您使用的是grails,爲什麼不簡單地使用模型類和findAll方法?
使用純原始SQL應該在特殊情況下完成。

+0

是的,這是這些情況之一;-)該表是一個視圖,所以在將該表定義爲域時存在一些問題。 – Khelben 2010-01-22 08:57:45

9

tim_yates的回答是一個乾淨的解決方案時要調用一個方法(或屬性)在順序列表中的每個元素轉變爲如:

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

,但如果你想從另一個對象調用一個方法或者做更復雜的東西,你可以用collect

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