Générer une liste à partir d'une autre liste de transformer chaque élément sur Groovy
J'ai le code suivant sur un Contrôleur de
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 */
Je ne peux pas tenir à l'écart de l'impression qu'il y a probablement une façon de le faire d'une façon plus élégante, quelque chose de semblable à une compréhension de liste en Python:
lines = [ l.name for l in db.rows("SELECT name FROM LINES") ]
Avoir à déclarer une liste vide, puis de renseigner, il ne semble pas le meilleur façon de faire les choses...
Est-il possible de faire quelque chose comme cela, ou Groovy ne le permet pas?
Vous devez vous connecter pour publier un commentaire.
Tu ne peux pas utiliser la propagation de l'opérateur, et à faire:
(voir http://docs.groovy-lang.org/latest/html/documentation/index.html#_spread_operator)
tim_yates réponse est une solution propre lorsque vous voulez appeler une méthode (ou une propriété) sur chaque élément de la liste afin de la transformer par exemple:
mais si vous voulez appeler une méthode d'un autre objet ou de faire quelque chose de plus complexe, vous pouvez utiliser
collect
:Bien, Si vous utilisez graal, pourquoi n'êtes-vous pas tout simplement à l'aide de la classe du modèle avec la méthode findAll?
À l'aide de la plaine SQL brut doit être fait sur des cas exceptionnels.