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。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。