общего предка List<Boolean>
и boolean[]
является Object
, так что если вы не в порядке с allTrue(Object booleans)
, вы не можете сделать это с одним методом.
Если вы меняете свою подпись метода на allTrue(Iterable<Boolean> booleans)
, вам нужно создать специальный Iterator<Boolean>
, чтобы пересечь булевский массив.
import java.util.Iterator;
import java.util.NoSuchElementException;
public class BooleanAllTrue {
public static boolean allTrue(Iterable<Boolean> booleans) {
if (booleans == null) return false;
for (Boolean bool : booleans) {
if (!bool) return false;
}
return true;
}
public static Iterable<Boolean> asIterable(final boolean[] booleens) {
return new Iterable<Boolean>() {
public Iterator<Boolean> iterator() {
final boolean[] booleans = booleens;
return new Iterator<Boolean>() {
private int i = 0;
public boolean hasNext() {
return i < booleans.length;
}
public Boolean next() {
if (!hasNext()) throw new NoSuchElementException();
return booleans[i++];
}
public void remove() {throw new UnsupportedOperationException("remove");}
};
}
};
}
public static void main(String [] args) {
System.out.println(allTrue(asIterable(new boolean[]{true, true})));
System.out.println(allTrue(asIterable(new boolean[]{true, false})));
try {
asIterable(new boolean[0]).iterator().next();
} catch (NoSuchElementException e) {
// expected
}
}
}
И, наконец, метод allTrue(boolean[] booleans)
.
public static boolean allTrue(boolean[] booleans) {
return allTrue(asIterable(booleans));
}
Вы используете Guava случайно? – shmosel
см. Http://stackoverflow.com/a/5606435/2310289 –
@shmosel No Guava – Kwoppy