Tôi gặp khó khăn khi tìm ra lý do tại sao findAny()
ném ngoại lệ con trỏ null sau hoạt động filter()
trên luồng. Trong trường hợp kiểm tra cụ thể này, hoạt động lọc nên lọc ra mọi thứ, không để lại kết quả nào cho findAny()
.Java stream findAny() gặp ngoại lệ con trỏ null sau khi lọc() hoạt động lọc ra mọi thứ
Optional<JsonNode> encryption = sseEncryptionList.stream()
.filter(n -> n.textValue().equals("AES256")) //Filters out everything
.findAny(); //Throws null pointer exception
Các stack trace:
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)
là hành vi mong đợi này cho findAny()
để ném một con trỏ null nếu ngoại lệ dòng không chứa bất kỳ yếu tố?
Chỉnh sửa: Cách thanh lịch và chức năng để giải quyết các hoạt động lọc có thể lọc ra tất cả các yếu tố là gì?
Bản sao có thể có của [Tại sao tìm thấy đầu tiên() ném NullPointerException nếu phần tử đầu tiên mà nó tìm thấy là null?] (https://stackoverflow.com/questions/32466799/why-does-findfirst-throw-a-nullpointerexception-if-the-first-element-it- find) – alfasin
cũng nếu bạn muốn lọc nulls, chỉ cần sử dụng 'filter (Objects :: nonNull)' như tôi đã nói trong câu trả lời. – Eugene