2012-10-04 9 views
101

Desidero verificare se una raccolta è vuota e null. Qualcuno potrebbe per favore fammi sapere le migliori pratiche.Procedura consigliata per convalidare la raccolta nullo e vuota in Java

Attualmente, sto controllando, come di seguito:

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

Oltre a qualsiasi altra cosa, pensa a * perché * tu usi 'null == sampleMap' piuttosto che' sampleMap == null'. La maggior parte delle persone trova quest'ultimo più leggibile: il primo è un retaggio di altre lingue. –

+1

se sei interessato, c'è [qualche altra argomentazione] (http://pushinginertia.com/2011/05/why-yoda-conditions-are-bad-and-usage-of-javas-final-keyword-is- buono /) sulla cosa @JonSkeet menzionato – eis

+0

A proposito, la raccolta nullo è cattiva. Se possibile, renderlo invece collezione vuota. 'Vedere Java efficace: Articolo 43 - Restituzione di array o raccolte vuoti, non nulli. ' –

risposta

150

Se si utilizza la libreria Apache Commons Collections nel progetto, è possibile utilizzare il CollectionUtils.isEmpty e MapUtils.isEmpty() metodi che controllano rispettivamente se una raccolta o di una mappa è vuoto o nulla (cioè sono "null- sicuro").

Il codice dietro questi metodi è più o meno quello che @icza ha scritto nella sua risposta.

Indipendentemente da ciò che fai, ricorda che minore è il codice che scrivi, minore è il codice che devi testare al diminuire della complessità del tuo codice.

+0

Grazie MapUtils.isEmpty è la soluzione perfetta per controllare la mappa è nullo o vuoto –

46

Questo è il modo migliore per verificarlo. Si potrebbe scrivere un metodo di supporto per farlo:

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

Ci deve essere una funzione simile anche per' Mappa '. –

+1

Certo, puoi aggiungerne uno anche per le mappe, ma il titolo indica la collezione. – icza

+1

Non capisco se m è nullo quindi .isEmpty() causerà NullPointerException rigth? altrimenti, se il lato sinistro (m == null) è vero, il rimanente non verrà controllato – ismail

10

Personalmente, preferisco usare le collezioni vuote al posto di null e hanno gli algoritmi funzionano in un modo che per l'algoritmo non importa se la raccolta è vuota o non.

2

Se è necessario verificare null, in questo modo. Tuttavia, se hai il controllo su questo, basta restituire la raccolta vuota, ogni volta che è possibile, e controllare solo per vuoto in seguito.

This thread è quasi la stessa cosa con C#, ma i principi si applicano ugualmente bene a Java. Come accennato là, nulla dovrebbe essere restituito solo se

  • nulla potrebbe significare qualcosa di più specifico;
  • l'API (contratto) potrebbe obbligarti a restituire null.
9

Se si utilizza Spring Framework, quindi è possibile utilizzare per controllare CollectionUtils contro entrambe le collezioni (List, Array) e Mappa ecc

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

Quando si utilizza la primavera, allora è possibile utilizzare

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

dove obj è un qualsiasi [mappa, raccolta, array, aythink ...]

altrimenti: il codice è:

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; 
} 

for String migliore è:

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

è possibile utilizzare "notEmpty" metodo s' org.apache.commons.lang.Validate:

Validate.notEmpty(myCollection) -> Convalida che la raccolta argomento specificato non è né nulla, né una dimensione pari a zero (nessun elemento); altrimenti lanciare un'eccezione.

0

Per tutte le mappe di incapsulamento utilizzare: metodo IsEmpty che è lì su questi oggetti di raccolta. Ma devi fare un controllo nulkl prima

Mappa mappa;

........ se (mappa = null & & map.isEmpty()!!) ......

1

Se si sta utilizzando framework Spring è possibile utilizzare:

CollectionUtils.isEmpty(Collection collection); 

Questo metodo restituisce true se la raccolta fornita è nulla o vuota.

Problemi correlati