La détection premier et le dernier élément à l'intérieur d'une fermeture Groovy chaque {}

StackOverflow https://stackoverflow.com/questions/4012538

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{}?

Était-ce utile?

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top