【发布时间】:2016-05-09 11:01:32
【问题描述】:
我正在阅读下面的源代码,我想知道为什么我会使用平面图方式。正如我所看到的,实例化了更多的对象,执行的代码比通过 if 语句执行的简单 null 检查要多得多,该语句将在第一个 null 处终止,而不必费心检查其他对象,并且可以很好地整齐地放入包装器中。
在我看来,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,您必须添加多个 null 检查以防止可能的 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);
【问题讨论】:
-
我会使用stackoverflow.com/questions/35337020/…,即不是
flatMap,而是map... -
IMO 这只是
flatMap可以被链接的一个例子 -
@MichaelDibbets 就是这样。一方面,
flatMap绝对不是正确的操作。如果有问题,它介于map和简单地进行null检查之间。这是基于意见的。 -
在我看来,创建
Optional实例并使用神奇的流运算符比没有开销的单纯布尔检查更有效。 -
我会做出的选择可能取决于上下文......但无论哪种方式,它都是基于意见的。这样的问题不适合 Stack Overflow。
标签: java