【问题标题】:How to do some operation when Optional has null value?当 Optional 为空值时,如何做一些操作?
【发布时间】:2020-06-17 18:21:29
【问题描述】:

在我的流中,我想根据用户的输入获取 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 实现它?

提前谢谢你。

【问题讨论】:

  • 一个想法,返回Optional&lt;MainMenuOptions&gt; 并留给调用者打印任何消息。例如,调用者可以使用 ifPresentOrElse()(从 Java 9 开始)。
  • 如果引发orElseThrow(()-&gt;new MenuOptionNotFoundException()),您可以抛出自定义异常并要求用户再次选择
  • 这些解决方案也不错。谢谢。

标签: java java-stream optional


【解决方案1】:

orElse之前使用Optional.map操作转换为Optional&lt;String&gt;

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

【讨论】:

  • 感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 2012-04-21
  • 1970-01-01
  • 2015-02-02
  • 1970-01-01
  • 2012-11-15
  • 1970-01-01
  • 2021-07-13
  • 1970-01-01
相关资源
最近更新 更多