がストリーム上でfilter()
操作の後にNULLポインタ例外をスローする理由がわかりません。この特定のテストケースでは、フィルター操作ですべてが除外され、findAny()
の結果は残っていないはずです。JavaストリームfindAny()がfilter()操作ですべてのものを除外した後にnullポインタ例外が発生しました
Optional<JsonNode> encryption = sseEncryptionList.stream()
.filter(n -> n.textValue().equals("AES256")) //Filters out everything
.findAny(); //Throws null pointer exception
スタックトレース:
Exception in thread "main" java.lang.NullPointerException
at example.Main.lambda$main$0(Main.java:41)
at java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:174)
at java.util.ArrayList$ArrayListSpliterator.tryAdvance(ArrayList.java:1351)
at java.util.stream.ReferencePipeline.forEachWithCancel(ReferencePipeline.java:126)
at java.util.stream.AbstractPipeline.copyIntoWithCancel(AbstractPipeline.java:498)
at java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:485)
at java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:471)
at java.util.stream.FindOps$FindOp.evaluateSequential(FindOps.java:152)
at java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.util.stream.ReferencePipeline.findAny(ReferencePipeline.java:469)
at example.Main.main(Main.java:42)
ストリームは任意の要素が含まれていない場合findAny()
ため、この予想される動作は、nullポインタ例外をスローしますか?
編集:すべての要素を除外するフィルタ操作を解決するための、エレガントで機能的な方法は何ですか?
[なぜfindFirst ()は、最初に見つかった要素がnullの場合、NullPointerExceptionをスローしますか?](https://stackoverflow.com/questions/32466799/why-does-findfirst-throw-a-nullpointerexception-if-the-first-element-it- finds) – alfasin
nullをフィルタリングしたい場合は、答えで述べたように 'filter(Objects :: nonNull)'を使用してください。 – Eugene