Java Stream findFirst() 与 findAny()的区别

在非并行流中,findFirst()findAny()在大多数情况下都可能返回 Stream 的第一个元素。
但是findAny()不提供这种行为的任何保证。

使用 findAny() 可以更快地从任何并行流中获取任何元素。
否则在大多数情况下我们总是可以使用 findFirst() 。

之路教程 https://onitr oad .com

Stream findAny()示例

下面的示例中,我们使用 finaAny()方法从 Stream中获取任何元素。
在获取第一个元素后,流操作就会转移到 ifPresent()方法。

我们使用 ifPresent()方法中的方法引用打印接收到的元素。

import java.util.stream.Stream;
public class Main 
{
	public static void main(String[] args) 
	{
		//sequential stream
		Stream.of("one", "two", "three", "four")
				.findAny()
				.ifPresent(System.out::println);

		//parallel stream
		Stream.of("one", "two", "three", "four")
			.parallel()
			.findAny()
			.ifPresent(System.out::println);
	}
}
Java Stream findAny方法

如果 Stream 非空,则 findAny() 方法返回描述给定流的任何元素的 Optional ,如果流为空,则返回空的 Optional 。

在非并行流中,findAny()将在大多数情况下返回第一个元素,但这种行为是不保证的。

引入了 Stream.findAny()方法只是为了在并行流的情况下提高性能。

Stream findAny()方法

Optional<T> findAny()
  • findAny()方法是一个终端短路操作。
  • findAny()方法返回一个 Optional
  • 如果 Stream 非空,则 Optional包含作为给定流的任何元素的值。在大多数情况下,返回的元素是第一个元素。
  • 如果 Stream 为空,则 Optional包含空值。
  • 如果所选元素为 null,则抛出 NullPointerException。
  • 对于所有顺序和并行流,它可以返回任何元素。findAny()的行为不会因 Stream 的并行性而改变。
  • 类似地,在流已定义遇到顺序或者根本没有遇到顺序的情况下,没有保证的行为差异。
日期:2020-09-17 00:10:07 来源:oir作者:oir