📜  Java Stream findAny() 与示例

📅  最后修改于: 2022-05-13 01:54:24.443000             🧑  作者: Mango

Java Stream findAny() 与示例

Stream findAny()返回描述流的某些元素的 Optional(可能包含或不包含非 null 值的容器对象),如果流为空,则返回空 Optional。

findAny() V/s findFirst() :

findAny() 方法返回 Stream 中的任何元素,但可能存在我们需要获取过滤流的第一个元素的情况。当正在处理的流具有定义的遇到顺序(处理流元素的顺序)时, findFirst() 很有用,它返回流中的第一个元素。

句法 :

Optional 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.

异常:如果选择的元素为空,则抛出NullPointerException

注意: findAny() 是 Stream 接口的终端短路操作。此方法返回满足中间操作的任何第一个元素。这是一个短路操作,因为它只需要返回“任何”第一个元素并终止其余的迭代。

示例 1:整数流上的 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 list = Arrays.asList(2, 4, 6, 8, 10);
  
        // Using Stream findAny() to return
        // an Optional describing some element
        // of the stream
        Optional 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:字符串流上的 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 list = Arrays.asList("Geeks", "for",
                                          "GeeksQuiz", "GFG");
  
        // Using Stream findAny() to return
        // an Optional describing some element
        // of the stream
        Optional 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() 操作的行为是明确的非确定性的,即可以自由选择流中的任何元素。对同一源的多次调用可能不会返回相同的结果。
示例 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