检查ArrayList是否仅包含空值的方法

DMa*_*ags 12 java android

我正在查看我的旧Android应用程序的代码,我看到我做了一件事:

        boolean emptyArray = true;
        for (int i = 0; i < array.size(); i++)
        {
            if (array.get(i) != null)
            {
                    emptyArray = false;
                    break;
            }
        }
        if (emptyArray == true)
        {
            return true;
        }
        return false;
Run Code Online (Sandbox Code Playgroud)

必须有一种更有效的方法 - 但它是什么?

emptyArray被定义为整数的ArrayList,它插入随机数的空值(稍后在代码中,实际的整数值).

谢谢!

Boh*_*ian 22

好吧,你可以为初学者使用更少的代码:

public boolean isAllNulls(Iterable<?> array) {
    for (Object element : array)
        if (element != null) return false;
    return true;
}
Run Code Online (Sandbox Code Playgroud)

使用此代码,您还可以传递更多种类的集合.


Java 8更新:

public static boolean isAllNulls(Iterable<?> array) {
    return StreamSupport.stream(array.spliterator(), true).allMatch(o -> o == null);
}
Run Code Online (Sandbox Code Playgroud)


Op *_*kel 6

没有更有效的方法.唯一能做的就是以更优雅的方式写出来:

List<Something> l;

boolean nonNullElemExist= false;
for (Something s: l) {
  if (s != null) {
     nonNullElemExist = true;
     break;
  }
}

// use of nonNullElemExist;
Run Code Online (Sandbox Code Playgroud)

实际上,它可能更有效,因为它使用Iterator和Hotspot编译器有更多的信息来优化使用size()get().