java8 findany 怎么用

2025-05-07 02:52:45
推荐回答(1个)
回答1:

Java8 的Stream语法可以说是声明式的代码了,所以正如名字所说,是找到任何一个就行

比如:有一个Integer的集合[1, 3, 5, 7]
e.g 1
List list = Arrays.asList(1, 3, 5, 7);
Optional any = list.stream().findAny();

这样出来的话,这个any肯定就是1了,因为此时stream是有顺序的,相当于一个list,把list中的数字按顺序去执行findany,所以第一个是1, 既然找到了1,因此直接返回1

e.g 2
List list = Arrays.asList(1, 3, 5, 7);
Optional any = list.stream().filter(i -> i>4).findAny();

这样的话,这个any肯定就是5了,因为此时根据filter过滤了一把,把大于4的数字留下来了,因此在执行findany之前,此时stream中只有5和7了,所以按照顺序,取到第一个是5,找了一个,因此直接返回5

e.g 3
List list = Arrays.asList(1, 3, 5, 7);
Optional any = list.stream().filter(i -> i>9).findAny();

这样的话,这个any就是Optional.empty,是一个空的了,因此根据filter过滤完了之后,没有大于9的,此时stream中没有元素,因此findany没有找到任何一个,所以返回空Optional

e.g 4
List list = Arrays.asList(1, 3, 5, 7);
Optional any = list.stream().parallel().findAny();

这个例子和e.g 1比较像,此时stream中加了parallel()方法,所以这个流是一个并行流,是无序的,那这个findany就无法确定到底返回谁了,1,3,5,7,哪一个都有可能返回了