使用连接方法对空值进行收集

时间:2015-04-18 21:34:09

标签: groovy

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

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

2 个答案:

答案 0 :(得分:3)

您可以使用subMap

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

答案 1 :(得分:2)

处理此问题的另一种方法是:

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

感谢Tim Yates在我的手腕上轻拍,让我意识到当我想到肉类,奶酪和乳制品时,我对牛肉,马苏里拉奶和牛奶过于笼统。 ;-)(见Tim的回答,注意我明显的无知)