假设我的项目中有这段代码:
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/