web-dev-qa-db-fra.com

Comment déterminer si une liste de chaînes contient des éléments nuls ou vides

En Java, j'ai la méthode suivante:

public String normalizeList(List<String> keys) {
    // ...
}

Je veux vérifier que keys:

  • N'est-ce pas null lui-même; et
  • N'est pas vide (size() == 0); et
  • Ne contient aucun élément String qui est null; et
  • Ne contient aucun élément String qui est vide ("")

C'est une méthode utilitaire qui ira dans un JAR de type "commons" (la classe sera quelque chose comme DataUtils). Voici ce que j'ai, mais je crois que c'est incorrect:

public String normalize(List<String> keys) {
    if(keys == null || keys.size() == 0 || keys.contains(null) || keys.contains(""))
        throw new IllegalArgumentException("Bad!");

    // Rest of method...
}

Je crois que les 2 derniers contrôles pour keys.contains(null) et keys.contains("") sont incorrects et renverront probablement des exceptions d'exécution. Je sais que je peux simplement parcourir la liste à l'intérieur de l'instruction if et rechercher des valeurs nulles/vides là-bas, mais je cherche une solution plus élégante, si elle existe.

13
IAmYourFaja
 keys.contains(null) || keys.contains("")

Ne lance aucune exception d'exécution ni aucun résultat true si votre liste a une chaîne vide (ou nulle).

29
kosa

Cela me semble bien, les seules exceptions que vous obtiendriez de keys.contains(null) et keys.contains("") seraient si keys était lui-même null.

Cependant, puisque vous vérifiez cela pour la première fois, vous savez qu'à ce stade, keys n'est pas null, aucune exception d'exécution ne se produira.

5
NominSim

Vous pouvez également utiliser Apache StringUtils et vérifier si la chaîne estBlank, cela vérifiera la valeur null, Emptystring et réduira également votre valeur.

if(StringUtils.isBlank(listItemString)){...}

Commander StringUtils Docs ici:

https://commons.Apache.org/proper/commons-lang/apidocs/org/Apache/commons/lang3/StringUtils.html

1
Goot

Je ne suis pas sûr, mais n'y a-t-il pas de classe d'assistance dans la bibliothèque ApacheCommon pour le faire? comme lorsque vous avez isEmpty pour une chaîne et que vous avez isNullOrEmpty dans la bibliothèque ApacheCommons 

0
sheidaei

Consultez la liste en un seul passage 

  public static boolean empty(String s) {
    if (s == null)
      return true;
    else if (s.length() == 0)
      return true;
    return false;
  }  

  public String normalize(List<String> keys) {
    if(keys == null || keys.size() == 0)
        throw new IllegalArgumentException("Bad!");
    for (String key: keys)
      if(empty(key))
         throw new IllegalArgumentException("Empty!");

    // Rest of method...
    return null;
  }
0
Roman C

Avec Java 8, vous pouvez faire:

public String normalizeList(List<String> keys) {
    boolean bad = keys.stream().anyMatch(s -> (s == null || s.equals("")));
    if(bad) {
        //... do whatever you want to do
    }
}
0
call-me