É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.
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.
Avec Apache Commons:
.filter(StringUtils::isNotEmpty)
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".
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.
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