[英]How to check if array is null or if the array contents are null
什么是检查数组是最好的方式null
值,或者如果数组内容是null
的组合在Java 6中1个语句:
if ((myArray[0] != null) || (myArray[1] != null) || (myArray!= null)) {
...
}
首先,检查数组本身是否不为null
。 如果数组为null
,则没有理由对其元素进行迭代,因为Java在访问它时将抛出NullPointerException
:
if (myArray != null) {
// ...
}
然后在条件主体内部遍历其所有元素,并检查其中之一是否为null
。
boolean hasNull = false;
for (int i=0; i<myArray.length; i++) {
if (myArray[i] == null) {
hasNull = true;
break; // to terminate the iteration since there is no need to iterate more
}
}
这种单行解决方案(感谢@Napstablook的警告)。 条件被评估为true
,如果数组本身是null
或它的元件之一是null
:
if !(myArray != null && myArray[0] != null && myArray[1] != null) { ... }
请注意, &&
运算符的作用是,如果左侧被评估为false
,则它将停止评估其余条件,因为它不会影响结果。 ||
但是true
。 但是,我建议您避免这种解决方案,因为索引可能会溢出。 最好使用上面提到的for-loop
。
为了让它检查任何值,我将使用allMatch
。 首先检查数组!= null也很重要,否则,将得到Exception。
if (array == null || Arrays.stream(array).allMatch(Objects::isNull))
请注意,这不适用于版本8之前的Java,在我发布答案后,OP编辑了他的要求
检查数组是否为空:
String array[] = null;
if (array == null) {
System.out.println("array is null");
}
检查数组是否为空:
array = new int[0];
if (array.length == 0) {
System.out.println("array is empty");
}
同时检查null:
int[] array = ...;
if (array.length == 0) { } // no elements in the array
if (array == null || iarray.length == 0) { }
尝试这个
if (myArray == null || Arrays.stream(myArray).allMatch(element-> element==null)) {}
编辑-对于Java 6,我真的看不到这一行。 如果不需要一行,可以尝试一下
boolean isNull = true;
if(myArray==null){
System.out.println("array is null");
}else{
for(Integer element: myArray){
if(element!=null){
System.out.println("array is not null");
isNull=false;
break;
}
}
if(isNull)
System.out.println("Array is null");
}
例如这个
boolean isNullOrContainsNull = array == null || Arrays.asList(array).contains(null);
在一行中检查数组是否为null或包含null元素
如果要检查数组为空还是空或所有元素都为空,请执行
boolean containsNothingUseful = array == null
|| array.length == 0
|| !new HashSet<String>(Arrays.asList(array))
.retainAll(Arrays.asList((String)null));
(假设一个String[]
数组)
使用Collection#retainAll()
方法,该方法在存在其他值(即与“ containsOnly”相反Collection#retainAll()
时返回true
使用这种衬里实际上实际上是效率低下的,更好的方法是使用如下所示的方法,该方法不会创建大量的临时对象和变异集合等。
public static boolean containsNothingUseful(String[] array) {
if (array == null || array.length == 0)
return true;
for (String element : array) {
if (element != null)
return false;
}
return true;
}
// ...
if (containsNothingUseful(myArray)) { .. }
代替Itreating Manullay数组,在这种情况下重新使用现有的集合。
请找到示例代码:
public static void main(String[] args) {
Integer[] array = new Integer[3];
array[0] = 1;
array[1] = null;
array[2] = 2;
System.out.println(Arrays.asList(array).contains(null));
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.