2011-06-05 63 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 
} 
相關問題