【问题标题】:Do void actions on an Optional, Java 8 [duplicate]在可选的Java 8上执行无效操作[重复]
【发布时间】:2019-07-18 21:23:06
【问题描述】:

我有一些处理逻辑:

public void handle(String uniqueId) {
    Optional<Config> config = configDAO.find(uniqueId);
    if (!config.isPresent()) {
        LOGGER.warn("config not found for uniqueId '{}'", uniqueId);
    } else {
        internalHandle(config.get());
    }
}

换句话说,我想运行两个 void 操作之一,基于 Optional 值的存在。

我非常担心在我的代码中不使用 isPresent,但看起来 java8 没有提供任何我可以替换此代码的东西。

【问题讨论】:

  • 你为什么不想使用它?
  • 你是对的,isPresent 是低级的,通常存在更好的选择。你能用Java 9吗?它有ifPresentOrElse,非常适合您的需求。
  • 这就是为什么我将问题标记为java-8
  • @DenisKurochkin 检查这可能有用:stackoverflow.com/questions/29235982/…
  • 您的代码没有任何内容,这是 java 8 的预期方式

标签: java java-8 functional-programming optional


【解决方案1】:

正如comments in java9 中提到的,您可以使用ifPresentOrElse

config.ifPresentOrElse(c -> internalHandle(c), 
           () -> LOGGER.warn("config not found for uniqueId '{}'", uniqueId));

如果使用if else 语句非常简单,则实现ifPresentOrElse。来自源代码:

public void ifPresentOrElse(Consumer<? super T> action, Runnable emptyAction) {
    if (value != null) {
        action.accept(value);
    } else {
        emptyAction.run();
    }
}

所以我想在 java 8 的例子中使用 if else 逻辑是合适的。

【讨论】:

  • 这就是为什么我将问题标记为java-8
  • @DenisKurochkin 好吧,这显然在 Java 8 中是不可能的,否则他们不会在 Java 9 中添加该方法...
  • 虽然这个答案对正在使用 Java 8 的提问者没有帮助,但它肯定会帮助其他读者。
猜你喜欢
  • 1970-01-01
  • 2015-07-07
  • 2017-11-06
  • 2021-10-12
  • 1970-01-01
  • 2021-11-24
  • 1970-01-01
  • 2021-11-03
  • 2019-06-26
相关资源
最近更新 更多