Java Stream findFirst()方法详解

后端 潘老师 6个月前 (10-27) 156 ℃ (0) 扫码查看

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()。


版权声明:本站文章,如无说明,均为本站原创,转载请注明文章来源。如有侵权,请联系博主删除。
本文链接:https://www.panziye.com/back/10428.html
喜欢 (0)
请潘老师喝杯Coffee吧!】
分享 (0)
用户头像
发表我的评论
取消评论
表情 贴图 签到 代码

Hi,您需要填写昵称和邮箱!

  • 昵称【必填】
  • 邮箱【必填】
  • 网址【可选】