java - 如何在 java 中使用 Optional 检查是否为 null 以及是否具有特定值?

标签 java if-statement functional-programming java-8 option-type

假设我的项目中有这段代码:

public List<T> getAll(Integer parameter) {
    if(parameter != null && parameter > -1) {
        // do something here
    }
}

我的问题是:如何使用 Optional 而不是使用 if 进行检查,或者是否还有其他我可以使用的东西?

最佳答案

Optional 的设计灵感来自于函数式编程世界中众所周知的 monad。在这种情况下,它可能看起来像这样:

public List<T> getAll(Integer parameter) {

    return Optional.ofNullable(parameter)
      .filter(p -> p > -1)
      .map(p -> *some modification*) //this line is optional
      .orElseGet(() -> *some default value, probably an empty list*)
}

在这种情况下,条件检查在 filter 方法中执行。如果给定的 Predicate 不匹配,底层的 Optional 将为空。

如果要对基础值执行操作,请使用 map 方法,方法是为其提供一个 Function,该函数应应用于由 包装的元素>可选

最后,您可以使用 ifPresent() 简单地执行一些操作,抛出异常 orElseThrow 或者简单地使用 orElse 返回默认值> 或 orElseGet。请记住,orElseGet 接受一个 Supplier 实例,这使得它延迟计算默认值。

如果您想深入挖掘,请查看来自 Devoxx 的 @stuart-marks 谈话:https://www.youtube.com/watch?v=Ej0sss6cq14&t=2767s

在您的情况下,可能根本不需要 Optional。无非两种方法。一个带参数,一个不带参数。

关于java - 如何在 java 中使用 Optional 检查是否为 null 以及是否具有特定值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40587621/

相关文章:

java - 如何设置静态宽度以在 SWT 中查看

java - 是否可以设置Hibernate的 "default"变量名映射?

ios - 如果陈述有脾气

r - 将参数传递给 Compose 的函数?

algorithm - 重构算法作为计算表达式?

java - 无法使用 FileInputStream 复制 PDF 文件

java - 参数多态性和子类型多态性之间的概念区别?

java - 使用 Java 中的 if else 语句确定两个字符的字母顺序

python - 在基本程序中使用 else 得到错误 : unindent does not match any outer indentation level

functional-programming - Hindley-Milner 类型系统中 letrec 的正确形式?