Если еще выполнение кода с необязательным классом - PullRequest
0 голосов
/ 07 января 2019

Я проходил урок по факультативному классу здесь - https://www.geeksforgeeks.org/java-8-optional-class/, который имеет следующий

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

Я пытаюсь сделать это из меньшего количества строк, используя ifPresent проверку Optional как

Optional.ofNullable(words[5]).ifPresent(a -> System.out.println(a.toLowerCase()))

но не может получить остальную часть дальше

Optional.ofNullable(words[5]).ifPresent(a -> System.out.println(a.toLowerCase())).orElse();// doesn't work```

Есть ли способ сделать это?

Ответы [ 3 ]

0 голосов
/ 07 января 2019

Если вы используете java 9 , вы можете использовать ifPresentOrElse() method ::

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

Если Java 8 , тогда посмотрите этот отличный шпаргалка :

http://www.nurkiewicz.com/2013/08/optional-in-java-8-cheat-sheet.html

0 голосов
/ 07 января 2019

Для большей ясности ifPresent примет Consumer в качестве аргумента, а тип возвращаемого значения - void, поэтому вы не можете выполнять какие-либо вложенные действия с этим

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

Если значение присутствует, вызвать указанного потребителя со значением, в противном случае ничего не делать.

Параметры:

потребитель - блок, который будет выполнен при наличии значения

Выдает:

NullPointerException - если значение присутствует, и потребитель является нулем

Поэтому вместо ifPreset() используйте map()

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

печать просто печать

System.out.println(Optional.ofNullable(words[5]).map(String::toLowerCase).orElse(null));
0 голосов
/ 07 января 2019

Java-9

Java-9 представила ifPresentOrElse для чего-то похожего в реализации. Вы можете использовать его как:

Optional.ofNullable(words[5])
        .map(String::toLowerCase) // mapped here itself
        .ifPresentOrElse(System.out::println,
                () -> System.out.println("word is null"));

Java-8

В Java-8 вы должны включить промежуточное звено Optional / String и использовать его как:

Optional<String> optional = Optional.ofNullable(words[5])
                                    .map(String::toLowerCase);
System.out.println(optional.isPresent() ? optional.get() : "word is null");

, который также может быть записан как:

String value = Optional.ofNullable(words[5])
                       .map(String::toLowerCase)
                       .orElse("word is null");
System.out.println(value);

или, если вы вообще не хотите хранить значение в переменной, используйте:

System.out.println(Optional.ofNullable(words[5])
                           .map(String::toLowerCase)
                           .orElse("word is null"));
...