Как выполнить некоторую операцию, когда Optional имеет нулевое значение? - PullRequest
3 голосов
/ 17 июня 2020

В моем потоке я хочу получить MainMenuOption на основе ввода пользователя. Если перечисление MainMenuOptions содержит такую ​​опцию, я хочу ее вернуть, если нет - напечатайте сообщение «ТАКОГО ОПЦИИ НЕТ» и снова получите ввод пользователя.

return Arrays.stream(MainMenuOptions.values())
            .filter(x -> x.getCommand().equals(ConsoleInput.getNextLineFromUser()))
            .findFirst() // it returns Optional<MainMenuOptions>
            .orElse(); //or Else return some value, cannot do something

Как я могу добиться этого с помощью Java Steams ?

Заранее спасибо.

1 Ответ

5 голосов
/ 17 июня 2020

Используйте операцию Optional.map перед orElse, чтобы преобразовать в Optional<String>, например

return Arrays.stream(MainMenuOptions.values())
        .filter(x -> x.getCommand().equals(ConsoleInput.getNextLineFromUser()))
        .findFirst()
        .map(MainMenuOptions::name)
        .orElse("THERE IS NO SUCH OPTION");
...