Java 中的 Stream findFirst() 方法

2024年9月10日 | 阅读 2 分钟

Java Stream 的 findFirst() 方法返回一个 Optional,该 Optional 描述流的第一个元素,如果流为空,则返回一个空的 Optional。

语法

在这里,Optional 是一个容器对象,它可以包含一个非空值,也可以不包含值。T 是对象的类型。

异常:如果选择了 null 元素,则会抛出 NullPointerException。

示例 1

观察下面的程序。

文件名: FindFirstExample.java

输出

11
12

示例 2

让我们来看另一个 findFirst() 方法的示例。

文件名: FindFirstExample1.java

输出

Linked List

示例 3:Null 异常

如前所述,当选择了 null 元素时,会抛出 NullPointerException。以下程序显示了这一点。

文件名: FindFirstExample2.java

输出

Exception in thread "main" java.lang.NullPointerException: Cannot invoke "String.equalsIgnoreCase(String)" because "" is null
	at findFirstExample2.lambda$main$0(findFirstExample2.java:15)
	at java.base/java.util.stream.ReferencePipeline$2$1.accept(ReferencePipeline.java:178)
	at java.base/java.util.Spliterators$ArraySpliterator.tryAdvance(Spliterators.java:1002)
	at java.base/java.util.stream.ReferencePipeline.forEachWithCancel(ReferencePipeline.java:129)
	at java.base/java.util.stream.AbstractPipeline.copyIntoWithCancel(AbstractPipeline.java:527)
	at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:513)
	at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:499)
	at java.base/java.util.stream.FindOps$FindOp.evaluateSequential(FindOps.java:150)
	at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
	at java.base/java.util.stream.ReferencePipeline.findFirst(ReferencePipeline.java:647)
	at findFirstExample2.main(findFirstExample2.java:15)