Обнаружение первого и последнего элемента внутри Groovy each{} closure
я использую удобный 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
- первый или последний пункт.
есть ли хороший Заводной способ сделать это, не прибегая к чему-то ручному, чтобы проверить индексы элементов по размеру списка, используя что-то вроде eachWithIndex{}
?
3 ответов
можно использовать
if(it == myList.first()) {
// First element
}
if(it == myList.last()) {
// Last element
}
ответ, предоставленный sbglasius, может привести к неправильному результату, например, когда список содержит избыточные элементы, поэтому элемент из списка может равняться последнему.
Я не уверен, что sbglasius может использовать is()
вместо ==
но правильный ответ может быть :
myList.eachWithIndex{ elt, i ->
if(i == 0) {
// First element
}
if(i == myList.size()-1) {
// Last element
}
}