don*_*ner 54 java arrays boolean
我在java中有一个布尔数组:
boolean[] myArray = new boolean[10];
Run Code Online (Sandbox Code Playgroud)
检查所有值是否为真的最优雅的方法是什么?
Eng*_*uad 71
public static boolean areAllTrue(boolean[] array)
{
for(boolean b : array) if(!b) return false;
return true;
}
Run Code Online (Sandbox Code Playgroud)
bas*_*ode 64
Arrays.asList(myArray).contains(false)
Run Code Online (Sandbox Code Playgroud)
Kap*_*rma 20
在Java 8中,您可以:
boolean isAllTrue = Arrays.asList(myArray).stream().allMatch(val -> val == true);
Run Code Online (Sandbox Code Playgroud)
甚至更短:
boolean isAllTrue = Arrays.stream(myArray).allMatch(Boolean::valueOf);
Run Code Online (Sandbox Code Playgroud)
注意:
您需要Boolean[]此解决方案才能工作.因为你不能有一个基元列表.
Ric*_*lly 15
这取决于您多次想要查找此信息,如果不止一次:
Set<Boolean> flags = new HashSet<Boolean>(myArray);
flags.contains(false);
Run Code Online (Sandbox Code Playgroud)
否则是短路循环:
for (i = 0; i < myArray.length; i++) {
if (!myArray[i]) return false;
}
return true;
Run Code Online (Sandbox Code Playgroud)
Pet*_*ček 11
我无法相信没有BitSet解决方案.
A BitSet是对一组位的抽象,因此我们不再需要boolean[]用于更高级的交互,因为它已经包含了大多数所需的方法.它在批处理操作中也相当快,因为它在内部使用long值来存储位,因此不像我们那样单独检查每个位boolean[].
BitSet myBitSet = new BitSet(10);
// fills the bitset with ten true values
myBitSet.set(0, 10);
Run Code Online (Sandbox Code Playgroud)
对于您的具体情况,我会使用cardinality():
if (myBitSet.cardinality() == myBitSet.size()) {
// do something, there are no false bits in the bitset
}
Run Code Online (Sandbox Code Playgroud)
另一种方法是使用番石榴:
return Booleans.contains(myArray, true);
Run Code Online (Sandbox Code Playgroud)
在 Java 8+ 中,您可以IntStream在0to范围内创建一个myArray.length并检查所有值是否都true在相应的(原始)数组中,例如,
return IntStream.range(0, myArray.length).allMatch(i -> myArray[i]);
Run Code Online (Sandbox Code Playgroud)
该行应足够:
BooleanUtils.and(boolean... array)
但要平息仅链接的纯粹主义者:
对一组布尔值执行和。
| 归档时间: |
|
| 查看次数: |
92413 次 |
| 最近记录: |