我有两个函数可以检查数组或列表的所有元素是否为true
。我把两者结合起来遇到了麻烦。如何将函数化为一个通用的Java函数。
public static boolean allTrue(boolean[] booleans) {
if (booleans == null) {
return false;
}
for (boolean bool : booleans) {
if (!bool) {
return false;
}
}
return true;
}
public static boolean allTrue(List<Boolean> booleans) {
if (booleans == null) {
return false;
}
for (boolean bool : booleans) {
if (!bool) {
return false;
}
}
return true;
}
答案 0 :(得分:4)
如果您正在使用Guava,可以将布尔数组包装在Booleans.asList()
中并将其作为列表传递:
.box-body {
min-height: 0; /* new */
}
.content-body {
min-height: 0; /* new */
}
答案 1 :(得分:2)
根据https://stackoverflow.com/a/5606435/2310289
你可以接受一个对象
public static boolean allTrue(Object booleans) {
然后检查instanceof boolean[]
或instanceof List<Boolean>
,然后在方法中执行不同的代码。
同样,不是真正的改进,而是更接近代码统一
答案 2 :(得分:1)
我认为@Joel给出的答案很好,除了评论中指出的问题。如果我们只是将boolean[]
转换为Boolean[]
,我们可以尝试以下操作:
public static boolean allTrue(List<Boolean> booleans) {
if (booleans == null) {
return false;
}
for (boolean bool : booleans) {
if (!bool) {
return false;
}
}
return true;
}
public static boolean allTrue(boolean[] booleans) {
Boolean[] newArray = new Boolean[booleans.length];
int i = 0;
for (boolean value : booleans) {
newArray[i++] = Boolean.valueOf(value);
}
return Arrays.asList(newArray);
}
答案 3 :(得分:1)
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));
}