2010-10-25 64 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

相關問題