Java 8 Stream findFirst和findAny

时间:2025-03-28 08:41:26

在Java 8 Stream中, findFirst()返回Stream中的第一个元素,而findAny()返回Stream中的任何元素。

1. findFirst()

1.1从整数流中找到第一个元素。

package .java8;

import ;
import ;
import ;

public class Java8FindFirstExample1 {

    public static void main(String[] args) {

        List<Integer> list = (1, 2, 3, 2, 1);

        Optional<Integer> first = ().findFirst();
        if (()) {
            Integer result = ();
            (result);       // 1
        } else {
            ("no value?");
        }

        Optional<Integer> first2 = list
                .stream()
                .filter(x -> x > 1).findFirst();

        if (()) {
            (()); // 2
        } else {
            ("no value?");
        }
    }

}

输出量

1
2

1.2从不等于“节点”的字符串流中找到第一个元素。

package .java8;

import ;
import ;
import ;

public class Java8FindFirstExample2 {

    public static void main(String[] args) {

        List<String> list = ("node", "java", "python", "ruby");

        Optional<String> result = ()
                .filter(x -> !("node"))
                .findFirst();

        if (()) {
            (()); // java
        } else {
            ("no value?");
        }

    }

}

输出量

java

2. findAny()

2.1从整数流中查找任何元素。 如果我们运行下面的程序,大多数情况下,结果是2,看起来findAny()总是返回第一个元素? 但是,对此无法保证findAny()可以从Stream返回任何元素。

package .java8;

import ;
import ;
import ;

public class Java8FindAnyExample1 {

    public static void main(String[] args) {

        List<Integer> list = (1, 2, 3, 4, 5, 6, 7, 8, 9, 10);

        Optional<Integer> any = ().filter(x -> x > 1).findAny();
        if (()) {
            Integer result = ();
            (result);
        }

    }

}

输出量

2 // no guaranteed

参考文献

  • Java 8 Streams过滤器示例
  • Java 8流JavaDoc
  • ()JavaDoc
  • ()JavaDoc

翻译自: /java8/java-8-stream-findfirst-and-findany/