331 votes

Meilleure pratique pour valider une collection vide ou nulle en Java

Je veux vérifier si une collection est vide et null. Est-ce que quelqu'un pourrait me faire savoir quelle est la meilleure pratique.

Actuellement, je vérifie comme suit :

if (null == sampleMap || sampleMap.isEmpty()) {
  // faire quelque chose
} 
else {
  // faire quelque chose d'autre
}

506voto

Jalayn Points 2407

Si vous utilisez la bibliothèque Apache Commons Collections dans votre projet, vous pouvez utiliser les méthodes CollectionUtils.isEmpty(...) et MapUtils.isEmpty(...) qui vérifient respectivement si une collection ou une map est vide ou null (c'est-à-dire qu'elles sont "null-safe").

Le code derrière ces méthodes est plus ou moins ce que l'utilisateur @icza a écrit dans sa réponse.

Peu importe ce que vous faites, rappelez-vous que moins de code vous écrivez, moins de code vous avez besoin de tester car la complexité de votre code diminue.

90voto

icza Points 3857

C'est la meilleure façon de le vérifier. Vous pourriez écrire une méthode d'aide pour le faire :

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

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

72voto

Z.Neeson Points 106

Si vous utilisez des frameworks Spring, alors vous pouvez utiliser CollectionUtils pour vérifier à la fois les collections (List, Array) et Map, etc.

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

24voto

Lorsque vous utilisez Spring, vous pouvez utiliser

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

où obj est n'importe quoi [map, collection, tableau, quoi que ce soit...]

sinon : le code est :

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

    // sinon
    return false;
}

pour String le mieux est :

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

22voto

tehlexx Points 1827

Personnellement, je préfère utiliser des collections vides au lieu de null et faire en sorte que les algorithmes fonctionnent de telle manière que, pour l'algorithme, il n'ait pas d'importance que la collection soit vide ou non.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X