groovy:在一行中测试一个数组

时间:2012-03-09 22:37:03

标签: arrays groovy if-statement

我想测试并查看数组中的所有内容是否都通过了我的检查,这是我目前正在做的以及我的幻想代码会使编译器崩溃。

电流:

def mylist = [1,2,3,4]
def presumeTrue = true
mylist.each{
  if(it<0)presumeTrue=false
}
if(presumeTrue)println "Everything was greater than 0!!"

幻想:

def mylist = [1,2,3,4]
if(mylist*>0)println "Everything was greater than 0, but this sugar doesn't work."

是否有正确的方法将if测试应用于一行列表中的所有内容?

2 个答案:

答案 0 :(得分:4)

使用every method

myList.every { it > 0 }

您尝试使用的运算符是“展开点”,即*.(不是*)。您需要使用方法名称(compareTo),它接受一个参数。但是map并不是你想要做的。

您不是要尝试将该方法应用于所有mylist的成员,而是尝试将该方法的结果聚合到所有成员,更像是:

mylist.inject(true) { acc, n -> acc && n > 0 }

答案 1 :(得分:1)

这对我有用......

def mylist = [1,2,3,4]
if(!mylist.find {it < 1}) println "Everything was greater than 0, and this sugar DID work."