2013-01-04 514 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. */) 
相關問題