2013-01-04 286 views
1

我认为必须有更好的方法来做到这一点。 我有一个函数返回一个ArrayList的调用。 如果该ArrayList只返回10个空项目(默认),有没有一种方法来检查这一点,而不是遍历所有10个项目,看看它们是否为空?检查arraylist是否只包含空值

+0

你能解释一下你是什么意思'ArrayList只返回10个空项目' – codeMan

+0

你是什么意思的“默认”?如果这意味着你没有添加任何内容,那么只需使用'.isEmtpy()'方法。 –

+0

为什么不使用isEmpty()方法? –

回答

7

通常,没有;没有其他办法可以告诉任意ArrayList包含null的十个实例,而不是循环它并确保每个元素都是null。当然,如果列表的大小()不等于十,那么可以放弃这一点。

2

你想检查ArrayList是否为空? (即myArrayList.isEmpty())还是你想检查ArrayList是否只包含null引用?如果你想检查是否所有的条目都是空的,那么你将需要检查每个条目...

boolean isListOfNulls(List myList){ 
    for(Object o: myList) 
     if(!(o == null)) 
      return false; 
    return true; 
} 
+4

为什么不是'if(o!= null)' – jlordo

+0

因为那是我输入鼠标的地方! :)。要么工作。在一个侧面说明中,现在我觉得有必要对此进行基准测试,看看它是否有所作为。 – Mike

+1

当然,这两个工作,但一个是很容易阅读,另一个需要在阅读时双重检查;) – jlordo

2
List<Object> arrayList = new ArrayList<Object>(); 

arrayList.isEmpty(); 
// first call returns true  

arrayList.add(null); 
// second call returns false  
Object obj = new Object(); 

arrayList.add(obj); 

arrayList.isEmpty(); 
// third call returns false 

这就是你想要的吗?

多次添加空值会将大小递增1,但除非循环数组列表,否则没有找到空对象数的具体“简单方法”。

+0

这不是他想要的。他的列表包含十个'null'条目。他的观点是空的,但是“isEmpty”会返回错误。 – jlordo

+0

更新了我的答案,稍微详细一点。 – Kevin

0

将默认值更改为空的ArrayList并使用isEmpty()。目前的默认是无意义的。

0

尝试使用流式API。

boolean haveOnlyNulls = arraylist.stream().noneMatch(object -> object != null); 
0

从Java 8中,你可以使用Streams这样的:

boolean nullsOnly = list.stream().noneMatch(Objects::nonNull); 

等于:

boolean nullsOnly = list.stream().allMatch(x -> x == null) 

在这里你可以看到测试的更普遍的方式,任何列表匹配给定Predicate

list.stream().allMatch(x -> /* Some testing function. */) 
相关问题