La détection premier et le dernier élément à l'intérieur d'une fermeture Groovy chaque {}
-
26-09-2019 - |
Question
J'utilise MarkupBuilder pratique de Groovy pour construire une page HTML à partir de diverses données source.
Une chose que je me bats à faire est de bien construire un tableau HTML et appliquer différentes classes de style pour les première et dernière lignes. Ceci est probablement mieux illustré par un exemple ...
table() {
thead() {
tr(){
th('class':'l name', 'name')
th('class':'type', 'type')
th('description')
}
}
tbody() {
// Add a row to the table for each item in myList
myList.each {
tr('class' : '????????') {
td('class':'l name', it.name)
td('class':'type', it.type)
td(it.description)
}
}
}
}
Dans la section <tbody>
, je voudrais définir la classe de l'élément <tr>
être quelque chose de différent selon que l'élément en cours dans myList
est le premier ou le dernier élément.
Y at-il une bonne façon Groovy-ified de le faire sans recourir à quelque chose manuel pour vérifier les index de l'élément contre la taille de la liste en utilisant quelque chose comme eachWithIndex{}
?
La solution
Vous pouvez utiliser
if(it == myList.first()) {
// First element
}
if(it == myList.last()) {
// Last element
}
Autres conseils
La réponse fournie par sbglasius peut conduire à un résultat incorrect comme lorsque la liste contient des éléments de redundants donc un élément à l'intérieur du mai de la liste est égale à la dernière.
Je ne sais pas si sbglasius pourrait utiliser is()
au lieu de ==
mais une réponse pourrait être:
myList.eachWithIndex{ elt, i ->
if(i == 0) {
// First element
}
if(i == myList.size()-1) {
// Last element
}
}
if (it.after.value! = Null) { ...... }
Travaux pour les cartes