Ras*_*ari 7 java functional-programming if-statement optional java-8
假设我的项目中有这个代码:
public List<T> getAll(Integer parameter) {
if(parameter != null && parameter > -1) {
// do something here
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:如何进行检查Optional而不是使用if,或者是否还有其他可以使用的东西?
Grz*_*rek 18
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*)
}
Run Code Online (Sandbox Code Playgroud)
在这种情况下,在该filter方法中执行条件检查.如果给定Predicate的匹配不匹配,则底层Optional将为空.
如果要对基础值执行操作,请使用map方法为其提供Function应该应用于包含的元素Optional.
最后,你可以使用简单的执行一些动作ifPresent(),抛出一个异常orElseThrow,或者只是返回默认值orElse或者orElseGet.请记住,orElseGet接受一个Supplier让它懒惰地评估默认值的实例.
如果你想深入挖掘,请查看Devoxx的@ stuart-marks对话:https://www.youtube.com/watch?v = Ej0sss6cq14 & t = 2767s
在您的情况下,可能根本不需要可选.只是两种方法.一个有参数而另一个没有.
Optional这种情况正如斯图尔特马克斯在" 可选 - 所有Bikesheds的母亲"中所说:
规则#4:创建一个Optional通常是一个坏主意,因为它的特定目的是从中链接方法以获取值.
这会产生无用的开销,而不会对代码可读性和可维护性进行任何改进.因此,您不应将参数包装为可选参数.
和
规则#6:避免在字段,方法参数和集合中使用Optional.
避免在方法参数中使用Optional
- 它不能真正使参数可选
强制调用网站为所有内容创建Optionals:
myMethod(Optional.of("some value"));
myMethod(Optional.empty());
另请参见为什么Java 8的Optional不能在参数中使用.
使用Optional<Integer>
public List<T> getAll(Integer paramter) {
return Optional.ofNullable(parameter)
.filter(p -> p > -1);
}
Run Code Online (Sandbox Code Playgroud)
这Optional<>只是可选模式的一个实现。有用的方法是Optional<T>#orElse(T default)将值设置为默认值,以防出现null,
如果您已经感兴趣但仍然无法解答您的疑问,请在评论中要求澄清。我会尽快回复。
| 归档时间: |
|
| 查看次数: |
3400 次 |
| 最近记录: |