Подтвердить что ты не робот

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

Я использую Groovy удобный MarkupBuilder для создания 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{}?

4b9b3361

Ответ 1

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

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

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

Ответ 2

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

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

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

  if(i ==  myList.size()-1) {
   // Last element
  }
}

Ответ 3

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

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