kan*_*ane 2 java functional-programming scala java-8 option-type
假设您有一个Optional<T>变量可以采用 3 个值之一:
检索值T或null其他值的最佳方法是什么?
这是一种方法:
Optional<String> op = ...
String str = op != null ? op.orElse(null) : null;
Run Code Online (Sandbox Code Playgroud)
这是另一种方法:
String str = Optional.ofNullable(op).flatMap(innerOpt -> innerOpt).orElse(null);
Run Code Online (Sandbox Code Playgroud)
各自的优点和缺点是什么?性能更高吗?又是一种 scala 式的吗?是否更具可读性/可维护性?
第一个可以简化为:
String str = op.orElse(null);
Run Code Online (Sandbox Code Playgroud)
这将是您所写的最易读的可能性。
人们常说,这Optional不是为了null处理,但我认为这只是品味问题。假设你必须像在 kotlin 中一样进行链接:
object?.child?.grandChild
Run Code Online (Sandbox Code Playgroud)
在每个级别,我们都执行空检查。在java中它将是:
object == null ? null : (object.child == null ? null : object.child.grandChild)
Run Code Online (Sandbox Code Playgroud)
这有点伤眼。它会写:
Optional.ofNullable(object)
.map(Parent::getChild)
.map(Child::getGrandChild)
.orElse(null);
Run Code Online (Sandbox Code Playgroud)
可能有点冗长,但对我来说 - 非常可读。正如我所说 - 这是一个品味问题。
PS:Optional这是一种通过将其包装在 monad 中来简化处理的方法null。不要放任Optional不管null!
| 归档时间: |
|
| 查看次数: |
1590 次 |
| 最近记录: |