流是无序的数据束,索引无法访问其成员。在这种情况下,的含义是什么
Stream.findFirst()
方法?什么";第一个";元素是指未排序的流吗?只是为了找到满足特定条件的任何元素,我们确实有方法
Stream.findAny()
对于Stream.findFirst()
,根据Java文档:
返回一个描述此流的第一个元素的{@link Optional},如果流为空,则返回一个空的{@code Optional}。如果流没有相遇顺序,那么可以返回任何元素
通常,流没有任何顺序,除非明确排序
Stream.sort()
方法。
也就是说,Stream.findFirst()
应该只有在流也被排序的情况下才有意义。
我说得对吗?请帮忙!
通常,流没有任何顺序,除非通过
Stream.sort()
方法显式排序。
这不是真的。来自文档:
流是否有相遇顺序取决于源和中间操作。
流是否有相遇顺序取决于源以及您使用的中间操作。sorted
只是制作有序流的方法之一。
文件继续说:
某些流源(如
List
或数组(本质上是有序的,而其他流源(例如HashSet
(则不是。
因此,您可以确保List.stream()
将始终为您提供有序流,而该流上的findFirst
将为您提供列表的第一个元素。
在无序流上的findFirst
,正如您引用的那样,将返回任何元素。这意味着不能保证返回哪个元素。它可能是第一个,但也可能是其他东西。
不能保证返回哪个元素。
Findfirst将始终在任何中间过程完成后找到方法处理的第一个元素。这里有一个例子。
int[] a = {1,7,3,5,6,9,8};
int res = Arrays.stream(a).boxed().filter(i->i%2 == 0).findFirst().get();
System.out.println(res);
打印
6
它是通过过滤器的第一个偶数。对于同一个数组,由于没有中间操作来更改流,下面将返回1。
int res = Arrays.stream(a).boxed().findFirst().get();
与findFirst
相比,findAny
可能会在顺序流中返回相同的元素。在并行操作中,即使在同一源的顺序操作中,findFirst
也总是会找到第一个返回的。CCD_ 13不会,因为不同的线程在不可预测的时间内会遇到不同的值。