在Java 8 Stream中,findFirst()返回Stream中的第一个元素,而findAny()返回Stream中的任何元素。
1. findFirst()
1.1 从整数流中找到第一个元素。
DemoFindFirst1.java
public class DemoFindFirst1 {
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()) {
System.out.println(first.get()); // 1
}
Optional<Integer> first2 = list.stream().filter(x -> x > 1).findFirst();
if (first2.isPresent()) {
System.out.println(first2.get()); // 2
}
}
}
1.2 从不等于“节点”的字符串流中找到第一个元素。
DemoFindFirst2.java
public class DemoFindFirst2 {
public static void main(String[] args) {
List<String> list = Arrays.asList("js", "java", "python", "C");
Optional<String> result = list.stream()
.filter(x -> !x.equalsIgnoreCase("js"))
.findFirst();
if (result.isPresent()) {
System.out.println(result.get()); // java
}
}
}
2. findAny()
2.1 从整数流中查找任何元素。 运行下面的程序,大多数情况下结果是2,看起来findAny()总是返回第一个元素,但是对此无法保证,findAny()可以从Stream返回任何元素。
DemoFindAny.java
public class DemoFindAny {
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);
}
}
}
本文通过示例介绍了Java8 Stream中findFirst()和findAny()的区别。findFirst()返回Stream的第一个元素,而findAny()可能返回任何元素,但不保证一致性。在过滤整数和字符串流后,分别展示了这两个方法的应用。注意findAny()在并行流中可能提高性能,但在顺序流中与findFirst()效果相近。
1973

被折叠的 条评论
为什么被折叠?



