2011-06-05 60 views
9

我一直在寻找通过对我的一个老的Android应用程序的代码,我看到一件事我没有到这样的效果:方法来检查,如果一个ArrayList只包含空值

 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,它们被插入一个随机数的空值(以后在代码中是实际的整数值)。

谢谢!

+0

顺便说一句,你刚才用'如果''而不是如果(emptyArray ==真)(emptyArray)' – 2011-06-05 15:58:31

回答

6

有没有更有效的方法。 的唯一的事情是你可以做的,就是把它写在更优雅的方式:

List<Something> l; 

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

// use of nonNullElemExist; 

其实,这是可能的,这是更有效,因为它使用Iterator和热点编译器有更多的信息使用进行优化,而不是size()get()

+0

_I将评论我自己的answer_:把它作为_Bohemian_做的功能,它是更有用 – 2011-06-05 15:16:52

19

嗯,你可以用少了很多代码首发:

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); 
} 
+0

是真的假的? :-) – Lobo 2011-06-05 14:16:25

+0

我做了编辑它在发布后很快交换,所以是的,但没有更多。如果在循环中没有找到任何空值,则最终返回值应该为“isAllNulls”方法为真 – Bohemian 2011-06-05 14:20:21

+0

谢谢!实际上,我已经计划完成这个项目,将所有“for”循环转换为上面使用的“for each”循环语法。 – DMags 2011-06-05 14:23:15

0

这不是检测只包含null但它可能足以使用您的名单上的contains(null)方法。

0

我用来做这样的事情:

// 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 
} 
相关问题