web-dev-qa-db-fra.com

Google Guava isNullOrEmpty pour les collections

Je vois que Guava a la méthode utilitaire isNullOrEmpty pour Strings

Strings.isNullOrEmpty(str)

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

Lists.isNullOrEmpty(list)

qui devrait être équivalent à

list == null || list.isEmpty()

Aussi, avons-nous quelque chose de similaire pour les tableaux? Quelque chose comme

Arrays.isNullOrEmpty(arr)

qui devrait être équivalent à

arr == null || arr.length == 0
97
Ramesh

Non, cette méthode n'existe pas en goyave et fait partie de notre "cimetière d'idées".

Nous ne pensons pas que "est nul ou vide" est une question que vous souhaitez vraiment poser à propos d'une collection.

Si une collection peut être nulle et que null doit être traitée de la même façon que vide, éliminez toute cette ambiguïté, 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 d'habitude. Faites cela immédiatement après avoir appelé l'API coquine et vous avez mis l'étrangeté derrière vous, au lieu de la laisser continuer indéfiniment.

Et si le "null qui signifie vraiment une collection vide" ne vous est pas retourné, mais bien transmis, votre travail est simple: laissez simplement une NullPointerException et relancez l'appelant.

131
Kevin Bourrillion

Une des choses que vous aurez tendance à trouver tout au long de Guava, c’est qu’elles ont tendance à être très antagonistes à l’égard des nulls. Les auteurs veulent vous décourager d'utiliser null autant que vous le faites probablement, et fournir des méthodes utilitaires facilitant l'utilisation de null serait contre-productif à cet égard.

Si vous voulez utiliser le paradigme de Guava, demandez-vous si la source de cette collection (ou de ce tableau) doit réellement renvoyer éventuellement null. Si ce n'est pas le cas, pensez à le marquer @NonNull et à renvoyer les collections vides au lieu de null. Ou bien, en tant que paramètre d'une fonction qui n'attend aucune liste null-, pensez à utiliser Preconditions.checkNotNull, qui lève une exception si une null est transmise (de manière inattendue).

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

35
Ray

Il y a CollectionUtils.isEmpty () in commons-collections.

28

Spring Framework a une classe utilitaire spécialisée appelée CollectionUtils. Et la méthode que vous recherchez est la suivante: org.springframework.util.CollectionUtils.isEmpty. Il renvoie true pour les collections nulles et vides.

Et pour les tableaux, il existe une méthode org.springframework.util.ObjectUtils.isEmpty qui se comporte pratiquement de la même façon.

7
Lukasz

Apache CollectionUtils 4 a une méthode CollectionUtils.emptyIfNull () qui renvoie une liste vide si la collection est null. Ceci est très utile dans une boucle foreach, vous n'avez donc pas besoin de faire un contrôle nul avant d'itérer 

2
Jeffrey

Ma solution est la suivante: MoreObjects.firstNonNull (list, Collections. EmptyList ())

J'utilise Guava MoreObjects avec des collections JDK. 

 @Test
public void listnull() {
List<String> list = null;

for (String str : MoreObjects.firstNonNull(list, Collections.<String> emptyList())) {
    System.out.println(str);
}

list = new ArrayList<String>();
list.add("http://stackoverflow.com/");

for (String str : MoreObjects.firstNonNull(list, Collections.<String> emptyList())) {
    System.out.println(str);
}
}
1
jeton

Regardez Collections Appache CollectionUtils.isEmpty () Renvoie true si la collection est nulle ou vide

0
Anastasiia Kuzina