Stream findAny()返回描述 Stream 中某些元素的Optional(一个容器对象,可能包含也可能不包含非null值),或者返回空的Optional(如果 Stream 为空)。
findAny() VS findFirst():
findAny()方法从Stream返回任何元素,但是在某些情况下,我们需要获取已过滤 Stream 的第一个元素。当正在处理的 Stream 具有定义的遇到顺序(处理 Stream 元素的顺序)时,则findFirst()很有用,它返回 Stream 中的第一个元素。
用法:
Optional<T> findAny() Where, Optional is a container object which may or may not contain a non-null value and T is the type of objects and the function returns an Optional describing some element of this stream, or an empty Optional if the stream is empty.
异常:如果所选元素为null,则抛出NullPointerException。
注意:findAny()是 Stream 接口的terminal-short-circuiting操作。此方法返回满足中间操作的任何第一个元素。这是一种短路操作,因为它只需要返回“任何”第一个元素并终止其余的迭代即可。
范例1:整数 Stream 上的findAny()方法。
// Java code for Stream findAny()
// which returns an Optional describing
// some element of the stream, or an
// empty Optional if the stream is empty.
import java.util.*;
class GFG {
// Driver code
public static void main(String[] args)
{
// Creating a List of Integers
List<Integer> list = Arrays.asList(2, 4, 6, 8, 10);
// Using Stream findAny() to return
// an Optional describing some element
// of the stream
Optional<Integer> answer = list.stream().findAny();
// if the stream is empty, an empty
// Optional is returned.
if (answer.isPresent()) {
System.out.println(answer.get());
}
else {
System.out.println("no value");
}
}
}
输出:
2
范例2:字符串 Stream 上的findAny()函数。
// Java code for Stream findAny()
// which returns an Optional describing
// some element of the stream, or an
// empty Optional if the stream is empty.
import java.util.*;
class GFG {
// Driver code
public static void main(String[] args)
{
// Creating a List of Strings
List<String> list = Arrays.asList("Geeks", "for",
"GeeksQuiz", "GFG");
// Using Stream findAny() to return
// an Optional describing some element
// of the stream
Optional<String> answer = list.stream().findAny();
// if the stream is empty, an empty
// Optional is returned.
if (answer.isPresent()) {
System.out.println(answer.get());
}
else {
System.out.println("no value");
}
}
}
输出:
Geeks
注意: Stream findAny()操作的行为是明确不确定的,即,可以自由选择 Stream 中的任何元素。对同一源的多次调用可能不会返回相同的结果。示例3:findAny()方法以一种不确定的方式返回被4整除的元素。
// Java code for Stream findAny()
// which returns an Optional describing
// some element of the stream, or an
// empty Optional if the stream is empty.
import java.util.OptionalInt;
import java.util.stream.IntStream;
class GFG {
// Driver code
public static void main(String[] args) {
// Creating an IntStream
IntStream stream = IntStream.of(4, 5, 8, 10, 12, 16)
.parallel();
// Using Stream findAny().
// Executing the source code multiple times
// may not return the same result.
// Every time you may get a different
// Integer which is divisible by 4.
stream = stream.filter(i -> i % 4 == 0);
OptionalInt answer = stream.findAny();
if (answer.isPresent())
{
System.out.println(answer.getAsInt());
}
}
}
输出:
16
相关用法
- Java Stream map()用法及代码示例
- Java Stream flatMapToLong()用法及代码示例
- Java Stream flatMapToDouble()用法及代码示例
- Java Stream flatMapToInt()用法及代码示例
- Java Stream flatMap()用法及代码示例
- Java Stream.reduce()用法及代码示例
- Java Stream.max()用法及代码示例
- Java Stream min()用法及代码示例
- Java Stream allMatch()用法及代码示例
- Java Stream anyMatch()用法及代码示例
注:本文由纯净天空筛选整理自Sahil_Bansall大神的英文原创作品 Java Stream findAny() with examples。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。