div body attribute html groovy closures markupbuilder

body - title html5



Detectando el primer y Ășltimo elemento dentro de Groovy cada{} cierre (3)

Estoy usando el práctico MarkupBuilder de Groovy para construir una página HTML a partir de varios datos fuente.

Una cosa que me cuesta hacer es construir una tabla HTML y aplicar diferentes clases de estilo a la primera y a la última fila. Esto probablemente se ilustra mejor con un ejemplo ...

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) } } } }

En la sección <tbody> , me gustaría configurar la clase del elemento <tr> para que sea diferente dependiendo de si el elemento actual en myList es el primero o el último elemento.

¿Existe una buena manera Groovy-ified para hacer esto sin recurrir a algo manual para verificar los índices de elementos contra el tamaño de la lista usando algo como eachWithIndex{} ?


La respuesta proporcionada por sbglasius puede dar lugar a resultados incorrectos, como cuando la lista contiene elementos redundantes, por lo que un elemento de la lista puede ser igual al último.

No estoy seguro de si sbglasius podría usar is() lugar de == pero una respuesta correcta podría ser:

myList.eachWithIndex{ elt, i -> if(i == 0) { // First element } if(i == myList.size()-1) { // Last element } }


Podrías usar

if(it == myList.first()) { // First element } if(it == myList.last()) { // Last element }


if (it.after.value! = null) {......}

Funciona para mapas