如何检查一个ArrayList是否只包含null值

13

我正在查看我一个旧的安卓应用程序的代码,然后我看到我做了一件类似于这样的事情:

        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;

有更高效的方法去做这件事情,但是它是什么呢?

emptyArray被定义为一个整数ArrayList,其中插入了随机数量的null值(稍后在代码中,实际整数值会被插入)。

谢谢!


顺便说一下,你只需要使用 if (emptyArray) 而不是 if (emptyArray == true) - Steve Kuo
5个回答

25

首先,你可以使用更少的代码:

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

使用这段代码,你可以传递更广泛的集合。


Java 8 更新:

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

我在发布后很快就编辑了它们,所以是的,但现在不再这样了。如果在循环中没有找到任何空值,则“isAllNulls”方法的最终返回应为true。 - Bohemian
谢谢!实际上,我计划通过将所有的“for”循环转换为你上面使用的“for each”循环语法来完成同一个项目。 - DMags
Ughh ... 没有阻塞的 while 包含没有阻塞的 if。你的讲师没有告诉过你如何使用 { } 保护自己免受误导性缩进吗? - Stephen C
@Stephen:在这种情况下,它不是很糟糕,因为它是一个不会改变并且能够很好地传达目的的小函数。我只会将其更加通用以使用List <?>,这样对于任何List都会有用,并且声明它为静态的。 - Op De Cirkel

6

没有更高效的方法。 唯一可以做的,就是以更优雅的方式编写它:

List<Something> l;

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

// use of nonNullElemExist;

实际上,这种方法更有效率,因为它使用了Iterator,而且热点编译器有更多的信息来进行优化,而不是使用size()get()


我会对自己的答案进行评论:像Bohemian一样将其放入函数中,这样会更加有用。 - Op De Cirkel

1
这并不是检测是否仅包含null值,但在列表上使用contains(null)方法可能已经足够了。

0

简单地检查它对我有效。希望对你也能有效!

    if (arrayListSubQues!=null){
return true;}
else {
return false }

-1

我曾经做过类似这样的事情:

// Simple loop to remove all 'null' from the list or a copy of the list
while array.remove(null) {
    array.remove(null);
}

if (CollectionUtils.isEmpty(array)) {
    // the list contained only nulls
}

我说要“从列表的副本中删除所有空值”,因为你想在其上工作。你也可以需要对其进行排序或计数,而不影响原始列表。 - Julien Feniou
这个问题不是关于删除的(我也不知道为什么我的先前评论消失了)。 - no id

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接