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); } }
如果 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