Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在filter()操作过滤掉所有内容后,Java streams findAny()遇到空指针异常_Java_Java 8_Java Stream - Fatal编程技术网

在filter()操作过滤掉所有内容后,Java streams findAny()遇到空指针异常

在filter()操作过滤掉所有内容后,Java streams findAny()遇到空指针异常,java,java-8,java-stream,Java,Java 8,Java Stream,我很难理解为什么findAny()在流上的filter()操作之后抛出空指针异常。在这个特定的测试用例中,filter操作应该过滤掉所有内容,不会为findAny()留下任何结果 如果流不包含任何元素,则findAny()是否会引发空指针异常 编辑:解决可能过滤掉所有元素的过滤操作的优雅而实用的方法是什么?您的困惑来自这样一个事实:您首先过滤了filter,并且您希望filter方法位于堆栈跟踪的某个位置;但请注意,中间操作本身并没有任何作用,它们是惰性地执行的,并且只有在存在终端操作时才会启动

我很难理解为什么
findAny()
在流上的
filter()
操作之后抛出空指针异常。在这个特定的测试用例中,filter操作应该过滤掉所有内容,不会为
findAny()
留下任何结果

如果流不包含任何元素,则
findAny()
是否会引发空指针异常


编辑:解决可能过滤掉所有元素的过滤操作的优雅而实用的方法是什么?

您的困惑来自这样一个事实:您首先过滤了
filter
,并且您希望
filter
方法位于堆栈跟踪的某个位置;但请注意,中间操作本身并没有任何作用,它们是惰性地执行的,并且只有在存在终端操作时才会启动(在您的例子中,例如
findAny
)。它实际上在堆栈跟踪中(过滤方法
中),但看起来是这样的:
Example.Main.lambda$Main$0(Main.java:41)

如果要筛选空值,请首先执行以下操作:

.filter(Objects::nonNull)
.filter(n -> n.textValue().equals("AES256"))
.findAny()

不,这不是行为,当流不包含任何元素时。在这种情况下,它会返回一个
可选的.empty()

此外,NPE是流中出现空值的原因,如中所述:


避免NPE的最佳方法是:

Optional<JsonNode> encryption = sseEncryptionList.stream()
              .filter(Objects::nonNull)
              .filter(n -> "AES256".equals(n.textValue()))
              .findAny();
Optional encryption=sseEncryptionList.stream()
.filter(对象::非空)
.filter(n->“AES256”.equals(n.textValue()))
.findAny();

“AES256”.equals(n.textValue())
如果n.textValue()为null,则不会抛出NPE

如果要过滤null,只需使用
过滤器(Objects::nonNull)
,正如我在回答中所说的。实际上,过滤lambda在堆栈跟踪中(
在example.Main.lambda$Main$0(Main.java:41)
)-所以异常被抛出那里
findAny
恰好是跟踪中最外层的函数。@Cthulhu-thx,这就是我的意思。很难更改尿布并回答:)将编辑…当n.textValue()返回null时会发生什么?我的意思是需要
filter(Objects::nonNull)
,但下一行可以在
n.textValue()
return
null
@YegorBabarykin时抛出NPE。如果您是正确的,您可以在这种情况下简单地反转等式:
n->“AES256”.equals(n.textValue())
.filter(Objects::nonNull)
.filter(n -> n.textValue().equals("AES256"))
.findAny()
Returns:
an Optional describing some element of this stream, or an empty Optional if the stream is empty

Throws:
NullPointerException - if the element selected is null
Optional<JsonNode> encryption = sseEncryptionList.stream()
              .filter(Objects::nonNull)
              .filter(n -> "AES256".equals(n.textValue()))
              .findAny();