web-dev-qa-db-fra.com

Dans Java 8, transformez facultatif <String> d'une chaîne vide dans Optional.empty

Étant donné une chaîne, je dois obtenir une valeur optionnelle. Par conséquent, si la chaîne est nulle ou vide, le résultat est Optional.empty. Je peux le faire de cette façon:

String ppo = "";
Optional<String> ostr = Optional.ofNullable(ppo);
if (ostr.isPresent() && ostr.get().isEmpty()) {
    ostr = Optional.empty();
}

Mais sûrement il doit y avoir une manière plus élégante.

42
Germán Bouzas

Vous pouvez utiliser un filtre:

Optional<String> ostr = Optional.ofNullable(ppo).filter(s -> !s.isEmpty());

Cela retournera un facultatif vide si ppo est nul ou vide.

74
assylias

Avec Apache Commons:

.filter(StringUtils::isNotEmpty)
16
Feeco

Réponse de Java 11:

var optionalString = Optional.ofNullable(str).filter(Predicate.not(String::isBlank));

String::isBlank _ traite une gamme plus large de caractères "vides".

5
Michael Barnwell

Que diriez-vous:

Optional<String> ostr = ppo == null || ppo.isEmpty()
    ? Optional.empty()
    : Optional.of(ppo);

Vous pouvez bien sûr mettre cela dans une méthode utilitaire si vous en avez souvent besoin. Je ne vois aucun avantage à créer un Optional avec une chaîne vide, pour ensuite l'ignorer.

3
Jon Skeet

Si vous utilisez Guava, vous pouvez simplement faire:

Optional<String> ostr = Optional.ofNullable(Strings.emptyToNull(ppo));

Vous pouvez utiliser la carte:

String ppo="";
Optional<String> ostr = Optional.ofNullable(ppo)
                                .map(s -> s.isEmpty()?null:s);
System.out.println(ostr.isPresent()); // prints false
2
Eran