Detectando o primeiro e o último item dentro de um groovy cada {} fechamento
-
26-09-2019 - |
Pergunta
Estou usando o Handy MarkupBuilder da Groovy para criar uma página HTML a partir de vários dados de origem.
Uma coisa que estou lutando para fazer bem é construir uma tabela HTML e aplicar diferentes classes de estilo nas primeiras e nas últimas linhas. Provavelmente isso é melhor ilustrado com um exemplo ...
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)
}
}
}
}
No <tbody>
seção, eu gostaria de definir a classe do <tr>
elemento para ser algo diferente, dependendo se o item atual em myList
é o primeiro ou o último item.
Existe uma boa maneira de fazer isso sem recorrer a algo manual para verificar os índices de itens em relação ao tamanho da lista usando algo como eachWithIndex{}
?
Solução
Você poderia usar
if(it == myList.first()) {
// First element
}
if(it == myList.last()) {
// Last element
}
Outras dicas
A resposta fornecida pelo sbglasius pode levar a um resultado incorreto, como quando a lista contém elementos redundantes, para que um elemento de dentro da lista possa ser igual ao último.
Não tenho certeza se Sbglasius poderia usar is()
ao invés de ==
Mas uma resposta correta pode ser:
myList.eachWithIndex{ elt, i ->
if(i == 0) {
// First element
}
if(i == myList.size()-1) {
// Last element
}
}
if (it.after.value! = null) {......}
Funciona para mapas