Обнаружение первого и последнего элемента внутри Groovy при каждом закрытии {} - PullRequest
26 голосов
/ 25 октября 2010

Я использую удобный MarkupBuilder от Groovy для создания HTML-страницы из различных исходных данных.

Одна вещь, которую я изо всех сил стараюсь сделать, это построить таблицу HTML и применить различные классы стилей к первой и последней строкам.Это, вероятно, лучше всего проиллюстрировано на примере ...

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

В разделе <tbody> я хотел бы установить класс элемента <tr>, который будет отличаться в зависимости от того, является ли текущий элемент вmyList - это первый или последний элемент.

Есть ли хороший способ Groovy, чтобы сделать это, не прибегая к чему-то ручному для проверки индексов элементов по размеру списка, используя что-то вроде eachWithIndex{}?

Ответы [ 3 ]

47 голосов
/ 25 октября 2010

Вы можете использовать

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

if(it == myList.last()) {
   // Last element
}
13 голосов
/ 20 сентября 2015

Ответ, предоставленный sbglasius, может привести к неверному результату, например, когда список содержит избыточные элементы, поэтому элемент из списка может равняться последнему.

Я не уверен, что sbglasius может использовать is() вместо == но правильный ответ может быть:

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

  if(i ==  myList.size()-1) {
   // Last element
  }
}
1 голос
/ 02 июля 2013

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

Работает для карт

...