文
章
目
录
章
目
录
findFirst()方法返回一个Optional对象,描述了给定流中的第一个元素(如果流非空),否则返回一个空的Optional对象(如果流为空)。
1.Stream的findFirst()方法
Optional<T> findFirst()
- findAny()方法是终端的短路操作,而findFirst()方法返回一个Optional对象。
- 如果流非空,Optional对象包含作为给定流的第一个元素的值;
- 如果流为空,Optional对象包含空值。
- 如果选定的元素为null,将抛出NullPointerException。
- 如果流具有定义的遭遇顺序,则findFirst()按遭遇顺序返回第一个元素。如果流没有遭遇顺序,则findFirst()可返回任何元素。
- 这种行为适用于所有顺序流和并行流,findFirst()的行为不会因流的并行性而改变。
2.Stream的findFirst()示例
在给定示例中,我们从流中获取第一个元素。一旦我们获得了第一个元素,流操作就会移动到ifPresent()方法中。我们使用方法引用在ifPresent()方法内部打印第一个元素。
public class Main
{
public static void main(String[] args)
{
//有序流
Stream.of("one", "two", "three", "four")
.findFirst()
.ifPresent(System.out::println);
//并行流
Stream.of("one", "two", "three", "four")
.parallel()
.findFirst()
.ifPresent(System.out::println);
}
}
输出:
one
one
3.Stream的findFirst()与findAny()比较
在非并行流中,大多数情况下findFirst()和findAny()都可能返回流的第一个元素,但findAny()不保证这种行为。使用findAny()可以更快地从任何并行流中获取任何元素。否则,在大多数情况下,我们始终可以使用findFirst()。