2015-04-18 50 views
1

我有一個簡單的方法,它查看從窗體通過的請求參數並將值顯示在一個字符串中。這種方法工作得很好,但是當一個空值從形式來通過它顯示是這樣的:在空值上使用連接方法的集合

beef:mozzarella::milk 

你可以看到,有一個額外的「:」如果值是空的我怎麼刪除?出於某種原因檢查v.size> 0是否無效。有任何想法嗎?

final String[] products = ["meat", "cheese", "nuts", "dairy"] 

String generateProducts() { 
     return request.requestParameterMap.findAll { k, v -> products.contains(k) } 
     .collect { k, v -> v.size() > 0 ? v[0] : "" 
     }.join(":") 
    } 

回答

3

你可以利用subMap

request.requestParameterMap 
     .subMap(products) 
     .findResults { k, v -> v ?: null } 
     .join(':') 
+0

謝謝@tim_yates,但似乎沒有多餘?有沒有辦法更新我的v.size()檢查? –

+1

'request.requestParameterMap.findAll {k,v - > v && products.contains(k)} .join(「:」)'。你永遠不會讓我讀這個問題。 :P – dmahapatro

+1

@DelmonYoung你可以做什麼dmahapatro超級暗示......我很喜歡前者的可讀性,但後者的簡潔性 –

2

另一種方式來處理,這將是:

products.collect { request.requestParameterMap[it] }.findAll().join(':') 

感謝Tim耶茨的水龍頭在我的手腕,使我意識到當我想到肉類,奶酪和奶製品時,我對牛肉,奶酪和牛奶過於通用。 ;-)(見蒂姆的回答注意我的公然無知)