Rilevamento primo e l'ultimo elemento all'interno di una Groovy ogni {} chiusura
-
26-09-2019 - |
Domanda
Sto usando comodo MarkupBuilder Groovy per costruire una pagina HTML da diversi dati di origine.
Una cosa Ho difficoltà a fare bene è costruire una tabella HTML e applicare diverse classi di stile per le prime e le ultime righe. Questo è probabilmente meglio illustrato con un esempio ...
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)
}
}
}
}
Nella sezione <tbody>
, vorrei impostare la classe dell'elemento <tr>
di essere qualcosa di diverso a seconda se l'elemento corrente nella myList
è il primo o l'ultimo elemento.
C'è un bel modo per fare questo senza ricorrere a qualcosa di manuale per verificare gli indici voce contro le dimensioni dell'elenco usando qualcosa come eachWithIndex{}
Groovy-ified?
Soluzione
Si potrebbe utilizzare
if(it == myList.first()) {
// First element
}
if(it == myList.last()) {
// Last element
}
Altri suggerimenti
La risposta fornita da sbglasius può portare a risultati non corretti come quando l'elenco contiene iperstatiche elementi in modo un elemento da dentro la lista può uguali l'ultimo.
Non sono sicuro se sbglasius poteva usare is()
invece di ==
ma una risposta corretta potrebbe essere:
myList.eachWithIndex{ elt, i ->
if(i == 0) {
// First element
}
if(i == myList.size()-1) {
// Last element
}
}
if (it.after.value! = Null) { ...... }
Opere per le mappe