2010-10-25 45 views
23

我使用Groovy方便的MarkupBuilder从各种源数据构建HTML页面。检测Groovy中的第一个和最后一个项每个{}关闭

我努力做的很好的一件事就是构建一个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-ified方式来做到这一点,而不诉诸手动检查项目索引对列表大小使用像eachWithIndex{}

回答

43

你可以使用

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

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

尼斯提示,不知道这些方法。 – xlson 2010-10-25 08:24:05

+0

有用,谢谢。如上所述,在...... – tomtheguvnor 2010-10-25 11:08:29

+3

之前没有看到过这些方法请记住,first()和last()仅适用于List,而不适用于Map或Set(按照http://groovy.codehaus.org/groovy-jdk /) – sbglasius 2010-10-26 07:34:37

1

如果(it.after.value!= NULL){ ...... }

Works的地图

10

答案提供sbglasius可能会导致不正确的结果,例如列表中包含冗余元素时,列表中的元素可能与最后一个元素相等。

我不知道,如果sbglasius可以使用is(),而不是==,但一个正确的答案可能是:

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

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

谢谢你的eachWithIndex :)这很好 – Elaine 2015-09-22 04:55:40

相关问题