2012-10-04 72 views
101

我想驗證集合是否爲空並且null。任何人都可以讓我知道最佳做法。驗證Java中的空集合和空集合的最佳實踐

目前,我檢查如下:

if (null == sampleMap || sampleMap.isEmpty()) { 
    // do something 
} 
else { 
    // do something else 
} 
+6

除了其他任何事情之外,請考慮*爲什麼*您使用'null == sampleMap'而不是'sampleMap == null'。大多數人認爲後者更具可讀性 - 前者是其他語言的延續。 –

+1

如果你有興趣,還有[更多論證](http://pushinginertia.com/2011/05/why-yoda-conditions-are-bad-and-usage-of-javas-final-keyword-is-好/)@JonSkeet提到的東西 – eis

+0

順便說一句,null收集不好。如果可能,請將其設爲空集合。 '參見Effective Java:Item 43 - 返回空數組或集合,不爲null。' –

回答

150

如果你在項目中使用的Apache Commons Collections庫,你可以使用CollectionUtils.isEmptyMapUtils.isEmpty()方法分別檢查集合或地圖(即它們是「空值安全」)。

這些方法背後的代碼或多或少是用戶@icza在他的回答中寫的。

無論您做什麼,請記住,您編寫的代碼越少,隨着代碼複雜程度的降低,需要測試的代碼就越少。

+0

由於MapUtils.isEmpty是檢查地圖爲空或空的完美解決方案 –

46

這是檢查它的最好辦法。你可以寫一個輔助方法來做到這一點:

public static boolean isNullOrEmpty(final Collection<?> c) { 
    return c == null || c.isEmpty(); 
} 

public static boolean isNullOrEmpty(final Map< ?, ? > m) { 
    return m == null || m.isEmpty(); 
} 
+0

'Map '也必須具有類似的功能。 –

+1

當然,你也可以爲地圖添加一個,但是標題說明了集合。 – icza

+1

我不明白如果m爲null,那麼.isEmpty()會導致NullPointerException rigth?否則,如果左側(m == null)爲真,那麼其餘的將不被檢查 – ismail

10

就個人而言,我更喜歡使用,而不是null空的藏品,並有算法的工作方式,對於算法也沒關係,如果集合爲空或不。

2

如果你需要檢查null,那就是這樣。但是,如果您對此有所控制,則只要可以,就返回空集合,然後僅檢查空集合。

This thread與C#大致相同,但這些原則同樣適用於java。就像提到的有,則應返回null只有

  • 空可能意味着更具體的事情;
  • 你的API(合同)可能會強制你返回null。
9

如果你使用Spring框架,那麼你可以使用CollectionUtils要檢查兩個集合(列表,數組)和地圖等

if(CollectionUtils.isEmpty(...)) {...} 
4

當您使用的彈簧,那麼你可以使用

boolean isNullOrEmpty = org.springframework.util.ObjectUtils.isEmpty(obj); 

其中obj是任何[圖,收集,陣列,aythink ...]

否則:所述代碼是:

public static boolean isEmpty(Object[] array) { 
    return (array == null || array.length == 0); 
} 

public static boolean isEmpty(Object obj) { 
    if (obj == null) { 
     return true; 
    } 

    if (obj.getClass().isArray()) { 
     return Array.getLength(obj) == 0; 
    } 
    if (obj instanceof CharSequence) { 
     return ((CharSequence) obj).length() == 0; 
    } 
    if (obj instanceof Collection) { 
     return ((Collection) obj).isEmpty(); 
    } 
    if (obj instanceof Map) { 
     return ((Map) obj).isEmpty(); 
    } 

    // else 
    return false; 
} 

絃樂最好的是:

boolean isNullOrEmpty = (str==null || str.trim().isEmpty()); 
0

您可以使用org.apache.commons.lang.Validate的 「notEmpty」 的方法:

Validate.notEmpty(myCollection) - >驗證指定的參數集合既不是空也不是一個大小爲零(沒有元素);否則拋出異常。

0

對於所有集合的集合映射使用:isEmpty方法,它存在於這些集合對象上。但您必須先做一次nulkl檢查

Map map;

........ 如果(地圖= NULL & & map.isEmpty()!) ......

1

如果您正在使用Spring框架,您可以使用:

CollectionUtils.isEmpty(Collection collection); 

如果提供的Collection爲null或空,則此方法返回true。