J'étais en train de parcourir un tutoriel de classe facultative ici - https: // www .geeksforgeeks.org / java-8-optional-class / qui contient le
Optional.ofNullable(words[5]).ifPresent(a -> System.out.println(a.toLowerCase())).orElse();// doesn't work```
J'essaye de le faire avec moins de lignes en utilisant ifPresent
vérification de Facultatif
comme
Optional.ofNullable(words[5]).ifPresent(a -> System.out.println(a.toLowerCase()))
mais impossible d'aller plus loin
String[] words = new String[10]; Optional<String> checkNull = Optional.ofNullable(words[5]); if (checkNull.isPresent()) { String word = words[5].toLowerCase(); System.out.print(word); } else{ System.out.println("word is null"); }
Y a-t-il un moyen de le faire?
3 Réponses :
Java-9 a introduit ifPresentOrElse
pour quelque chose de similaire dans l'implémentation. Vous pouvez l'utiliser comme:
System.out.println(Optional.ofNullable(words[5]) .map(String::toLowerCase) .orElse("word is null"));
Avec Java-8, vous devez inclure un intermédiaire Facultatif
/ String
et utiliser comme:
String value = Optional.ofNullable(words[5]) .map(String::toLowerCase) .orElse("word is null"); System.out.println(value);
qui peut également être écrit comme:
Optional<String> optional = Optional.ofNullable(words[5]) .map(String::toLowerCase); System.out.println(optional.isPresent() ? optional.get() : "word is null");
ou si vous ne souhaitez pas du tout stocker la valeur dans une variable, utilisez:
Optional.ofNullable(words[5]) .map(String::toLowerCase) // mapped here itself .ifPresentOrElse(System.out::println, () -> System.out.println("word is null"));
Si vous utilisez java 9 , vous pouvez utiliser la méthode ifPresentOrElse ()
::
Optional.of(words[5]).ifPresentOrElse( value -> System.out.println(a.toLowerCase()), () -> System.out.println(null) );
Si Java 8 , regardez ce bon aide-mémoire :
http://www.nurkiewicz.com/2013/08/optional-in-java-8-cheat-sheet.html
Pour être un peu plus clair, ifPresent
prendra Consumer
comme argument et le type de retour est void
, vous ne pouvez donc pas effectuer d'actions imbriquées sur ce
System.out.println(Optional.ofNullable(words[5]).map(String::toLowerCase).orElse(null));
Si une valeur est présente, invoquez le consommateur spécifié avec la valeur, sinon ne faites rien.
consommateur - bloc à exécuter si une valeur est présente NullPointerException - si la valeur est présente et que le consommateur est nul Donc au lieu de print Juste pour imprimer
ifPreset ()
utilisez map()
String result =Optional.ofNullable(words[5]).map(String::toLowerCase).orElse(null);
public void ifPresent(Consumer<? super T> consumer)
placard que vous viendrez pour java-8 serait
System.out.println (Facultatif.ofNullable (mots [5]). map (String: : toLowerCase) .orElse ("Not Present"));
Remarque : J'ai tagué la question avec Java-8 en fonction du lien que vous avez partagé, n'hésitez pas à supprimer ou à modifier la modification.
avez-vous essayé java 9 ?? BTW bonne question :)