【发布时间】:2018-10-15 16:26:26
【问题描述】:
我在下面有这段代码。
findfirst 调用正在抛出 NullPointerException,即使我有一个 orElseGet 调用链
int numberOfRetry = 5;
String req = "abc";
String res =
Stream.iterate(0, n -> n + 1).map(i -> {
try {
return req.substring(numberOfRetry - i);
} catch (Exception e) {
// log exception
}
return null;
})
.limit(1)
.findFirst()
.orElseGet(() -> "Exception");
但是,如果我按如下所示进行过滤调用,它就可以正常工作:
int numberOfRetry = 5;
String req = "abc";
String res =
Stream.iterate(0, n -> n + 1).map(i -> {
try {
return req.substring(numberOfRetry - i);
} catch (Exception e) {
// log exception
}
return null;
})
.limit(1)
.filter(Objects::nonNull)
.findFirst()
.orElseGet(() -> "Exception");
我想在某些情况下我们不能显式返回null,而且乍一看还不太清楚这些情况是什么。在第一种情况下,它返回一个带有null 元素的stream,它抛出NullPointerException,在第二种情况下,它返回一个可以正常工作的空流。
【问题讨论】:
-
既然你已经更新了问题,handle exception是否也意味着返回一些值?
-
@nullpointer 我只是在
catch块中记录异常。
标签: java java-8 java-stream optional