Создайте список из другого списка, преобразуя каждый элемент в 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") ]

Чтобы объявить пустой список, а затем заполнить его, он не выглядит как лучший способ делать вещи... Возможно ли сделать что-то подобное, или Groovy не позволяет это?

Ответ 2

Ответ tim_yates - это чистое решение, когда вы хотите вызвать метод (или свойство) для каждого элемента списка, чтобы его преобразовать, например:

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

но если вы хотите вызвать метод из другого объекта или сделать что-то более сложное, вы можете использовать collect:

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

Ответ 3

Ну, если вы используете grails, почему бы вам просто не использовать класс модели вместе с методом findAll?
Использование простого raw SQL должно выполняться в исключительных случаях.