2010-10-25 3 views
23

J'utilise MarkupBuilder de Groovy pour créer une page HTML à partir de diverses données source.Détection du premier et dernier élément à l'intérieur d'une fermeture Groovy each {}

Une chose que j'ai du mal à faire est de construire une table HTML et d'appliquer différentes classes de styles à la première et à la dernière rangée. 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.

Existe-t-il un moyen sympa de faire ceci sans recourir à quelque chose de manuel pour vérifier les index des éléments par rapport à la taille de la liste en utilisant quelque chose comme eachWithIndex{}?

Répondre

43

Vous pouvez utiliser

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

if(it == myList.last()) { 
    // Last element 
} 
+0

pointe Nice, ne connaissait pas ces méthodes. – xlson

+0

Utile, merci. Comme ci-dessus, n'avait pas vu ces méthodes avant ... – tomtheguvnor

+3

Rappelez-vous, que first() et last() ne fonctionne que sur List, pas Map ou Set (voir http://groovy.codehaus.org/groovy-jdk /) – sbglasius

1

si (it.after.value! = Null) { ......}

Works pour les cartes

10

La réponse fournie par sbglasius peut conduire à un résultat incorrect, comme lorsque la liste contient des éléments redondants, de sorte qu'un élément de la liste peut être égal au dernier.

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 
    } 
} 
+0

Merci pour le eachWithIndex :) c'est sympa – Elaine

Questions connexes