假设我有三个带对象的列表
List<String> list1, list2, list3
检查其中任何一个是否为空并执行某些操作的最佳方法是什么?
到目前为止,我想出了
if ([list1, list2, list3].any()) {
// do some action
}
但是有没有办法省略if
块?
答案 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" })