У меня есть boolean массив в java:
boolean[] myArray = new boolean[10];
Какой самый элегантный способ проверить, истинны ли все значения?
У меня есть boolean массив в java:
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)
Это зависит от того, сколько раз вы захотите найти эту информацию, если не один раз:
Set<Boolean> flags = new HashSet<Boolean>(myArray);
flags.contains(false);
В противном случае короткий цикл:
for (i = 0; i < myArray.length; i++) {
if (!myArray[i]) return false;
}
return true;
В Java 8 вы можете сделать:
boolean isAllTrue = Arrays.asList(myArray).stream().allMatch(val -> val == true);
Или даже короче:
boolean isAllTrue = Arrays.stream(myArray).allMatch(Boolean::valueOf);
Примечание:
Для этого решения вам нужно Boolean[]
. Потому что у вас нет списка примитивов.
Я не могу поверить, что нет BitSet
.
A 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.length()) {
// do something, there are no false bits in the bitset
}
Другой альтернативой является Guava:
return Booleans.contains(myArray, true);
OK. Это "самое изящное" решение, которое я мог бы найти на лету:
boolean allTrue = !Arrays.toString(myArray).contains("f");
Надеюсь, что это поможет!
Это, вероятно, не быстрее и, безусловно, не очень читаемо. Итак, ради красочных решений...
int i = array.length()-1;
for(; i > -1 && array[i]; i--);
return i==-1
В Java 8+ вы можете создать IntStream
в диапазоне от 0
до myArray.length
и проверить, что все значения true
в соответствующем (примитивном) массиве имеют что-то вроде
return IntStream.range(0, myArray.length).allMatch(i -> myArray[i]);
boolean alltrue = true;
for(int i = 0; alltrue && i<booleanArray.length(); i++)
alltrue &= booleanArray[i];
Я думаю, что это выглядит нормально и ведет себя хорошо...
Я предполагаю, что единственный способ - итерация.
for(i = 0; i < myArray.length; i++){
if(!myArray[i]){
return false;
}
}
return true;
Вы можете проверить, что все значения являются истинными или ложными, сравнивая ваш массив с другим булевым массивом с помощью метода 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);
}