![](/img/trans.png)
[英]What is the most elegant way to remove values that have duplicates from a Java array
[英]What is the most elegant way to check if all values in a boolean array are true?
我在 java 中有一个 boolean 数组:
boolean[] myArray = new boolean[10];
检查所有值是否为真的最优雅的方法是什么?
public static boolean areAllTrue(boolean[] array)
{
for(boolean b : array) if(!b) return false;
return true;
}
Arrays.asList(myArray).contains(false)
在 Java 8 中,你可以这样做:
boolean isAllTrue = Arrays.asList(myArray).stream().allMatch(val -> val == true);
或者更短:
boolean isAllTrue = Arrays.stream(myArray).allMatch(Boolean::valueOf);
注意:此解决方案需要Boolean[]
才能工作。 因为你不能有一个原语列表。
这取决于您要查找此信息的次数(如果不止一次):
Set<Boolean> flags = new HashSet<Boolean>(myArray);
flags.contains(false);
否则短路回路:
for (i = 0; i < myArray.length; i++) {
if (!myArray[i]) return false;
}
return true;
我不敢相信没有BitSet
解决方案。
BitSet
是对一组位的抽象,因此我们不必再使用boolean[]
进行更高级的交互,因为它已经包含了大部分需要的方法。 它在批处理操作中也非常快,因为它在内部使用long
值来存储位,因此不会像我们对boolean[]
那样单独检查每一位。
BitSet myBitSet = new BitSet(10);
// fills the bitset with ten true values
myBitSet.set(0, 10);
对于您的特定情况,我会使用cardinality()
:
if (myBitSet.cardinality() == myBitSet.size()) {
// do something, there are no false bits in the bitset
}
另一种选择是使用番石榴:
return Booleans.contains(myArray, true);
在 Java 8+ 中,您可以在0
到myArray.length
范围内创建一个IntStream
并检查相应(原始)数组中的所有值是否为true
,例如,
return IntStream.range(0, myArray.length).allMatch(i -> myArray[i]);
这可能不会更快,而且绝对不是很可读。 所以,为了丰富多彩的解决方案......
int i = array.length()-1;
for(; i > -1 && array[i]; i--);
return i==-1
boolean alltrue = true;
for(int i = 0; alltrue && i<booleanArray.length(); i++)
alltrue &= booleanArray[i];
我认为这看起来不错并且表现良好......
只需使用Arrays.toString
将数组转换为String
并测试它是否包含false
。
演示:
import java.util.Arrays;
public class Main {
public static void main(String args[]) {
// Test
System.out.println(areAllValuesTrue(new boolean[] { true, true, true, true }));
System.out.println(areAllValuesTrue(new boolean[] { true, false, false, true }));
System.out.println(areAllValuesTrue(new boolean[] { false, false, false, false }));
}
static boolean areAllValuesTrue(boolean[] arr) {
return !Arrays.toString(arr).contains("false");
}
}
输出:
true
false
false
您可以通过Arrays.equal
方法将您的数组与其他布尔数组进行比较来检查所有值项是真还是假,如下例所示:
private boolean isCheckedAnswer(List<Answer> array) {
boolean[] isSelectedChecks = new boolean[array.size()];
for (int i = 0; i < array.size(); i++) {
isSelectedChecks[i] = array.get(i).isChecked();
}
boolean[] isAllFalse = new boolean[array.size()];
for (int i = 0; i < array.size(); i++) {
isAllFalse[i] = false;
}
return !Arrays.equals(isSelectedChecks, isAllFalse);
}
Kotlin:如果一个元素为假,则并非所有元素都被选中
return list.filter { isGranted -> isGranted.not() }.isNotEmpty()
好的。 这是我可以即时想到的“最优雅”的解决方案:
boolean allTrue = !Arrays.toString(myArray).contains("f");
希望有帮助!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.