6

我有一个布尔元素列表:

  def list=[true,false,true,true]

我问是否存在如下方法:

  list.joinBoolean('&&')

<假

因为:真 && 假 && 真 && 真=假

list.joinBoolean('||')

< 真

因为:真|| 假 || 真 || 真=真

如果它不存在,我知道如何执行循环以获得预期结果;

  boolean tmp=true;
  list.each{e->
     tmp=tmp && e;    
  }
   return tmp;

或者

  boolean tmp=false;
  list.each{e->
     tmp=tmp || e;    
  }
   return tmp;
4

3 回答 3

4

或者:

list.inject { a, b -> a && b }
list.inject { a, b -> a || b }

如果list可以为空,则需要使用较长的注入形式:

list.inject(false) { a, b -> a && b }
list.inject(false) { a, b -> a || b }

或者使用下面的anyandevery方法


顺便提一句

其他答案中提到的anyand函数的工作方式如下:every

list.any()
list.every()

或(更长的形式)

list.any { it == true }
list.every { it == true }
于 2013-08-22T12:45:34.393 回答
4

anyevery方法可以在这里派上用场

于 2013-08-22T12:43:06.603 回答
1

不,没有这种方法。但是你可以在没有每个循环的情况下做到这一点:

def list=[true,false,true,true]
list.any{it==true} // will work as list.joinBoolean('||')
list.every{it==true} // will work as list.joinBoolean('&&')
于 2013-08-22T12:44:45.957 回答