在Java 8 Stream中, findFirst()
返回Stream中的第一个元素,而findAny()
返回Stream中的任何元素。
1. findFirst()
1.1从整数流中找到第一个元素。
Java8FindFirstExample1.java
package com.mkyong.java8;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
public class Java8FindFirstExample1 {
public static void main(String[] args) {
List<Integer> list = Arrays.asList(1, 2, 3, 2, 1);
Optional<Integer> first = list.stream().findFirst();
if (first.isPresent()) {
Integer result = first.get();
System.out.println(result); // 1
} else {
System.out.println("no value?");
}
Optional<Integer> first2 = list
.stream()
.filter(x -> x > 1).findFirst();
if (first2.isPresent()) {
System.out.println(first2.get()); // 2
} else {
System.out.println("no value?");
}
}
}
输出量
1
2
1.2从不等于“节点”的字符串流中找到第一个元素。
Java8FindFirstExample2.java
package com.mkyong.java8;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
public class Java8FindFirstExample2 {
public static void main(String[] args) {
List<String> list = Arrays.asList("node", "java", "python", "ruby");
Optional<String> result = list.stream()
.filter(x -> !x.equalsIgnoreCase("node"))
.findFirst();
if (result.isPresent()) {
System.out.println(result.get()); // java
} else {
System.out.println("no value?");
}
}
}
输出量
java
2. findAny()
2.1从整数流中查找任何元素。 如果我们运行下面的程序,大多数情况下,结果是2,看起来findAny()
总是返回第一个元素? 但是,对此无法保证 , findAny()
可以从Stream返回任何元素。
Java8FindAnyExample1.java
package com.mkyong.java8;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
public class Java8FindAnyExample1 {
public static void main(String[] args) {
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
Optional<Integer> any = list.stream().filter(x -> x > 1).findAny();
if (any.isPresent()) {
Integer result = any.get();
System.out.println(result);
}
}
}
输出量
2 // no guaranteed
参考文献
翻译自: https://mkyong.com/java8/java-8-stream-findfirst-and-findany/