2015-02-11 63 views
1

我想創建類結構如下例所示:的Java檢查空的ArrayList作爲一個階級結構

public class SubjectListStructure { 
    public String topic_id; 
    public String topic_title; 
    public String created_date; 
    public String avatar_url; 
    public String vote; 
    public String name_family; 
} 

現在,我想創建一個包含這些對象的ArrayList:

ArrayList<SubjectListStructure> nSubjects = = new ArrayList<SubjectListStructure>(); 

但現在我不能檢查是否nSubjects是空的或有這樣的代碼一些數據:

public static Boolean ContainsAllNulls(ArrayList<SubjectListStructure> arrList) 
{ 
    if(arrList != null) 
    { 
     for(SubjectListStructure a : arrList) 
      if(a != null) return false; 
    } 

    return true; 
} 

nSubjects.isEmpty()這個解決方案和ContainsAllNulls(nSubjects)不能正確檢查並返回列表中錯誤的結果

+1

爲什麼ArrayList在第一個位置包含空值?你不能避免添加空值嗎? – Eran 2015-02-11 09:36:05

+0

@Eran我想只檢查那是空的或沒有 – 2015-02-11 09:36:49

+0

什麼是你的問題?請尊重Java命名約定,請勿使用原始ArrayList類型,並使用布爾值而不是布爾值。 – 2015-02-11 09:37:14

回答

1

首先,你不應該允許null秒。在這種情況下,只要List.isEmpty()會告訴你列表是否爲空。

如果您不能或不想拒絕null s,您的代碼將正常工作並正確測試列表是否僅包含null s。

您甚至不必將其與isEmpty()方法結合使用,因爲增強型for也適用於空列表和陣列(在這種情況下,for的主體將不會執行)。

可以概括你的代碼是這樣的,其適用於不只是ArrayList秒,但對於所有Collection S(單,套等),並與任何元素類型不只是你的自定義SubjectListStructure類型:

public static boolean emptyOrAllNulls(Collection<?> c) { 
    if (c != null) 
     for (Object o : c) 
      if(o != null) 
       return false; 

    return true; 
}  

請注意,增強型for使用Collection.iterator()來獲取Iterator來遍歷集合的元素。如果是空集合,首先檢查集合是否包含任何元素而不通過迭代器會更高效:

public static boolean emptyOrAllNulls(Collection<?> c) { 
    if (c != null && !c.isEmpty()) 
     for (Object o : c) 
      if(o != null) 
       return false; 

    return true; 
}