当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Java Stream findAny()用法及代码示例


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


相关用法


注:本文由纯净天空筛选整理自Sahil_Bansall大神的英文原创作品 Java Stream findAny() with examples。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。