groovy检查是否有空并做一些动作

时间:2016-02-05 08:29:57

标签: groovy

假设我有三个带对象的列表

List<String> list1, list2, list3

检查其中任何一个是否为空并执行某些操作的最佳方法是什么?

到目前为止,我想出了

if ([list1, list2, list3].any()) {
    // do some action
}

但是有没有办法省略if块?

2 个答案:

答案 0 :(得分:2)

我认为没有比

更好的东西了
if (list1 || list2 || list3) {
}

您需要某种NotEmptyPredicate(l1, l2, l3).ifMatch { println 'hi' },但它在标准库中不存在。创造一个是不值得的。

答案 1 :(得分:0)

您的问题的一个客观部分是省略if块。这个答案与此有关。我不建议将其用于生产代码,也不要求这是最佳方式,这是主观的。

通常,如果使用地图可以“隐藏”语句。 (上下文是List上的一个新的静态方法,通过Groovy的元编程):

List.metaClass.static.ifNotEmpty = { List<String>... lists ->
    def resultMap = [:]

    resultMap[true] = { Closure c -> c.call() }
    resultMap[false] = { Closure c -> }

    return resultMap[lists.any()]
}

以下是示例用法...请参阅this Q&A以了解({ })的不寻常语法

List<String> list1, list2, list3

list1 = []
list2 = null
list3 = []
list3 << "HELLO"

List.ifNotEmpty(list1, list2, list3) ({ println "test 1" })

list1 = []
list2 = null
list3 = []

List.ifNotEmpty(list1, list2, list3) ({ println "should not see this" })