101 votes

Google Guava isNullOrEmpty pour les collections

Je vois que Guava a une méthode utilitaire isNullOrEmpty pour les chaînes de caractères.

Strings.isNullOrEmpty(str)

Avons-nous quelque chose de similaire pour les Listes ? Quelque chose comme

Lists.isNullOrEmpty(list)

ce qui devrait être équivalent à

list == null || list.isEmpty()

Existe-t-il quelque chose de similaire pour les tableaux ? Quelque chose comme

Arrays.isNullOrEmpty(arr)

ce qui devrait être équivalent à

arr == null || arr.length == 0

140voto

Kevin Bourrillion Points 19677

Non, cette méthode n'existe pas dans Guava et se trouve en fait dans notre "cimetière d'idées".

Nous ne pensons pas que "is null or empty" soit une question à poser sur une collection.

Si une collection peut être nulle et que null doit être traité de la même manière que empty, il faut lever toute ambiguïté dès le départ, comme ceci :

Set<Foo> foos = NaughtyClass.getFoos();
if (foos == null) {
  foos = ImmutableSet.of();
}

ou comme ceci (si vous préférez) :

Set<Foo> foos = MoreObjects.firstNonNull(
    NaughtyClass.getFoos(), ImmutableSet.<Foo>of());

Après cela, vous pouvez simplement utiliser .isEmpty() comme la normale. Faites-le immédiatement après avoir appelé la vilaine API et vous aurez mis fin à la bizarrerie, au lieu de la laisser se poursuivre indéfiniment.

Et si le "null qui signifie en réalité une collection vide" ne vous est pas retourné, mais vous est passé, votre travail est facile : il suffit de laisser un NullPointerException être lancé, et faire en sorte que l'appelant s'organise.

37voto

Ray Points 2879

Une chose que vous trouverez dans toute la Goyave, c'est qu'ils ont tendance à être très antagonistes envers null s. Les auteurs veulent vous décourager d'utiliser null autant que vous le faites probablement, et en fournissant des méthodes utilitaires pour faciliter l'utilisation null serait contre-productif par rapport à cet objectif.

Si vous voulez utiliser le paradigme de Guava, demandez-vous si la source de cette collection (ou tableau) doit vraiment retourner optionnellement null . Si ce n'est pas le cas, envisagez de le marquer @NonNull et retourner des collections vides au lieu de null . Ou en tant que paramètre d'une fonction qui ne s'attend à aucun null -Pour les listes de valeurs, envisagez d'utiliser Preconditions.checkNotNull qui lève une exception si une null est (inopinément) adopté.

Si null est vraiment légitime, list == null || list.isEmpty() n'est pas si difficile.

29voto

Steven Schlansker Points 17463

Il y a un CollectionUtils.isEmpty() dans commons-collections.

9voto

Lukasz Baran Points 3821

Spring Framework possède une classe utilitaire spécialisée appelée CollectionUtils . Et la méthode que vous recherchez est : org.springframework.util.CollectionUtils.isEmpty . Il retourne vrai pour les collections nulles et vides.

Et pour les tableaux, il y a org.springframework.util.ObjectUtils.isEmpty qui se comporte à peu près de la même manière.

2voto

Jeffrey Points 90

Apache CollectionUtils 4 dispose d'une méthode CollectionUtils.emptyIfNull() qui renvoie une liste vide si la collection est nulle. Ceci est très utile dans une boucle foreach, vous n'avez pas besoin de faire une vérification de nullité avant d'itérer.

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