Groovy 对空值使用join方法的集合

Groovy 对空值使用join方法的集合,groovy,Groovy,我有一个简单的方法,它查看来自表单的请求参数,并以字符串形式显示值。此方法工作正常,但当表单中出现空值时,它会显示如下内容: beef:mozzarella::milk 您可以看到有一个额外的“:”如果该值为空,如何删除该值?出于某种原因,检查v.size>0是否不起作用。有什么想法吗 final String[] products = ["meat", "cheese", "nuts", "dairy"] String generateProducts() { return

我有一个简单的方法,它查看来自表单的请求参数,并以字符串形式显示值。此方法工作正常,但当表单中出现空值时,它会显示如下内容:

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(":")
    }

您可以使用
subMap

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

另一种处理方法是:

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

感谢蒂姆·耶茨(Tim Yates)轻拍我的手腕,让我意识到,当我想到肉、奶酪和奶制品时,我对牛肉、马苏里拉干酪和牛奶的理解变得过于笼统了(请看关于Tim回答的评论,以注意我的公然无知)

谢谢@Tim_yates,但这不是多余的吗?有没有办法只更新我的v.size()检查?
request.requestParameterMap.findAll{k,v->v&&products.contains(k)}.join(“:”
)。你从不让我也读这个问题P@DelmonYoung你可以照德马哈帕特罗的建议去做。。。我很喜欢前者的可读性,但后者的简洁性——即使是我以前的评论——也不会给出预期的结果。但是这将
request.requestParameterMap.findAll{k,v->v&&k in products}.keySet().join(/:/)
:)如果你将其作为答案发布,我会投票支持!总比把它埋在这里好;-)