首页 > 解决方案 > 在可选的 Java 8 上执行 void 操作

问题描述

我有一些处理逻辑:

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 没有提供任何我可以替换此代码的东西。

标签: javajava-8functional-programmingoptional

解决方案


正如java9中的评论中提到的那样,您可以使用ifPresentOrElse

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

ifPresentOrElseif 非常简单的 usingif else语句的实现。从源代码:

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

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


推荐阅读