我读了下面的源码,很疑惑为什么要使用flatMap方法。我认为这样实例化的对象更多,执行的代码也更多,与简单的if语句的空值检查相比,速度更慢,而且在第一个null处终止,不必检查其他值,而且适用于包装器。
在我看来,if检查更快+更安全(对于我来说,速度真的很关键,因为我通常只有2-3毫秒来执行大量代码,如果有的话)。
使用“(flat)Map”可选方式的优点是什么?为什么应该考虑切换到它?
来源:http://winterbe.com/posts/2014/07/31/java8-stream-tutorial-examples/
为了解决外部实例的内部字符串 "foo",你需要添加多个空值检查以防止可能的NullPointerExceptions。
可以利用可选项的flatMap操作实现相同的行为:
在我看来,if检查更快+更安全(对于我来说,速度真的很关键,因为我通常只有2-3毫秒来执行大量代码,如果有的话)。
使用“(flat)Map”可选方式的优点是什么?为什么应该考虑切换到它?
来源:http://winterbe.com/posts/2014/07/31/java8-stream-tutorial-examples/
class Outer {
Nested nested;
}
class Nested {
Inner inner;
}
class Inner {
String foo;
}
为了解决外部实例的内部字符串 "foo",你需要添加多个空值检查以防止可能的NullPointerExceptions。
Outer outer = new Outer();
if (outer != null && outer.nested != null && outer.nested.inner != null) {
System.out.println(outer.nested.inner.foo);
}
可以利用可选项的flatMap操作实现相同的行为:
Optional.of(new Outer())
.flatMap(o -> Optional.ofNullable(o.nested))
.flatMap(n -> Optional.ofNullable(n.inner))
.flatMap(i -> Optional.ofNullable(i.foo))
.ifPresent(System.out::println);
flatMap
的例子。 - Alex SalauyouflatMap
绝对不是正确的操作。如果有疑问,那就在map
和简单地进行null
检查之间选择。而这是基于个人观点的。 - TunakiOptional
实例并使用神奇的流操作符比仅进行布尔检查而没有额外开销更高效的可能性非常小。 - EpicPandaForce