9
votes

If else exécution de code avec la classe facultative

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 commentaires

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 :)


3 Réponses :


12
votes

Java-9

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"));

Java-8

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"));

0 commentaires

2
votes

Si vous utilisez java 9 , vous pouvez utiliser la méthode ifPresentOrElse () ::

https://docs.oracle.com /javase/9/docs/api/java/util/Optional.html#ifPresentOrElse-java.util.function.Consumer-java.lang.Runnable-

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


0 commentaires

4
votes

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 ifPreset () utilisez map()

String result =Optional.ofNullable(words[5]).map(String::toLowerCase).orElse(null);

print Juste pour imprimer

public void ifPresent(Consumer<? super T> consumer)


0 commentaires