使用带字符串数组的collect删除null和empty值

时间:2015-04-19 02:11:42

标签: groovy

我有一个简单的表单,我试图从中检索值。除了我想从集合中删除null或空值。我得到的一个示例输出是:

joey:admin:null::155:null

您可以看到值为null,其中一个值为空(具有两个冒号的值)。我做错了什么我想如果我检查了尺寸和空检查它不会通过?我有什么想法我做错了吗?

String generateValues() {
        return request.requestParameterMap
            .findAll { key, value -> !(key in ["honeypot", "confirm"]) }      
            .collect { k, v -> if(v != null && v.size() > 0) v[0]
}.join(",")
}

1 个答案:

答案 0 :(得分:3)

您未检查.collect的结果。此闭包也将为空键返回空值(无else部分)。

试试这个:

return request.requestParameterMap
    .findAll { key, value -> !(key in ["honeypot", "confirm"]) }      
    .collect { k, v -> if(v != null && v.size() > 0) v[0] }
    .findAll { x -> x != null && x.length() > 0 }
}.join(",")

或使用.findResults代替.collect

return request.requestParameterMap
    .findAll { key, value -> !(key in ["honeypot", "confirm"]) }      
    .findResults { k, v -> v?.size() > 0 && v[0]?.length() > 0 ? v[0] : null }
}.join(",")