web-dev-qa-db-fra.com

Méthode recommandée pour valider les collections null et vide dans Java

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

Actuellement, je vérifie comme ci-dessous:

if (null == sampleMap || sampleMap.isEmpty()) {
  // do something
} 
else {
  // do something else
}
181
user1635014

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 carte est vide ou null (c'est-à-dire qu'ils sont "null-safe").

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

Indépendamment de ce que vous faites, rappelez-vous que moins vous écrivez de code, moins vous avez de code à tester lorsque la complexité de votre code diminue.

263
Jalayn

C'est la meilleure façon de le vérifier. Vous pouvez écrire une méthode d'assistance 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();
}
65
icza

Si vous utilisez des frameworks Spring, vous pouvez utiliser CollectionUtils pour comparer à la fois Collections (List, Array) et Map etc.

if(CollectionUtils.isEmpty(...)) {...}
26
Neeson.Z

Personnellement, je préfère utiliser des collections vides au lieu de null et faire en sorte que les algorithmes fonctionnent de manière à ce que l’algorithme importe peu si la collection est vide ou non.

17
tehlexx

Lorsque vous utilisez le printemps, vous pouvez utiliser

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

où obj est quelconque [carte, collection, tableau, aythink ...]

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

    // else
    return false;
}

pour String best is:

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

Si vous avez besoin de vérifier null, c'est la solution. Cependant, si vous avez le contrôle sur cela, renvoyez simplement une collection vide, chaque fois que vous le pouvez, et vérifiez uniquement s'il est vide ultérieurement.

Ce fil est à peu près la même chose que C #, mais les principes s’appliquent également à Java. Comme mentionné ici, null ne devrait être retourné que si

  • null pourrait vouloir dire quelque chose de plus spécifique;
  • votre API (contrat) peut vous obliger à renvoyer null.
2
eis

Vous pouvez utiliser la méthode " notEmpty " de org.Apache.commons.lang.Validate:

Validate.notEmpty(myCollection) -> Valider que la collection d'arguments spécifiée n'est ni nulle ni égale à zéro (aucun élément); sinon lancer une exception.

2