Stream
的 findFirst
方法在此流中找到第一个元素为 Optional
。如果流没有元素,则 findFirst
返回空 Optional
。如果流没有遇到顺序,则 findFirst
可以选择任何元素。如果 findFirst
选择的元素为空,则抛出 NullPointerException
。
从 Java 文档中找到 findFirst
声明。
Optional<T> findFirst()
findFirst
方法返回包含流中第一个元素的 Optional
。
如果选择空值,findFirst
将抛出 NullPointerException
。
findFirst
是短路终端操作。流操作是中间操作和终端操作的组。如果中间操作可以为无限输入产生有限流,则它是短路操作。
现在让我们讨论 findFirst
示例。
Example-1:假设我们有一个整数流,我们在上面调用 findFirst
方法。
Stream.of(50, 60, 70).findFirst()
.ifPresent(s -> System.out.println(s));
输出为 50,这是流的第一个元素。
查找更多代码。
FindFirstDemo1.java
package com.concretepage;
import java.util.Arrays;
import java.util.List;
public class FindFirstDemo1 {
public static void main(String[] args) {
List<String> list = Arrays.asList("Vijay", "Suresh", "Vinod");
String output = list.stream()
.filter(e -> e.startsWith("V")) // Vijay, Vinod
.findFirst() //Vijay
.orElse("NA");
System.out.println(output);
List<Integer> numList = Arrays.asList(31, 32, 33, 34);
numList.stream()
.filter(n -> n % 2 == 0) // 32, 34
.findFirst() //32
.ifPresent(e -> System.out.println(e));
}
}
输出
Vijay
32
Example-2:查找使用 IntStream
、LongStream
和 DoubleStream
的 findFirst
方法的示例。
FindFirstDemo2.java
package com.concretepage;
import java.util.stream.DoubleStream;
import java.util.stream.IntStream;
import java.util.stream.LongStream;
public class FindFirstDemo2 {
public static void main(String[] args) {
IntStream intStream = IntStream.of(10, 20, 30, 40);
intStream.filter(i -> i > 20).findFirst()
.ifPresent(i -> System.out.println(i));
LongStream longStream = LongStream.of(100, 200, 300);
longStream.filter(l -> l < 250).findFirst()
.ifPresent(l -> System.out.println(l));
DoubleStream doubleStream = DoubleStream.of(100.52, 200.55, 300.66);
doubleStream.filter(d -> d > 200).findFirst()
.ifPresent(l -> System.out.println(l));
}
}
输出
30
100
200.55
Example-3:查找具有并行流的 findFirst
示例。
FindFirstDemo3.java
package com.concretepage;
import java.util.ArrayList;
import java.util.List;
public class FindFirstDemo3 {
public static void main(String[] args) {
List<Employee> list = new ArrayList<>();
list.add(new Employee("Emp A", 3000));
list.add(new Employee("Emp B", 4000));
list.add(new Employee("Emp C", 5000));
list.add(new Employee("Emp D", 6000));
list.parallelStream()
.filter(e -> e.getSal() >= 4000 && e.getSal() <= 5000)
.mapToInt(e -> e.getSal())
.findFirst()
.ifPresent(s -> System.out.println(s));
}
}
class Employee {
private String name;
private int sal;
public Employee(String name, int sal) {
this.name = name;
this.sal = sal;
}
//Sets and Gets
}
输出
4000
Example-4:查找具有空值的 findFirst
示例。
FindFirstDemo4.java
package com.concretepage;
import java.util.stream.Stream;
public class FindFirstDemo4 {
public static void main(String[] args) {
Stream.of(null, "A").
findFirst().ifPresent(s -> System.out.println(s));
}
}
输出将是 NullPointerException
。
版权说明 : 本文为转载文章, 版权归原作者所有 版权申明
原文链接 : https://www.concretepage.com/java/java-8/java-stream-findfirst
内容来源于网络,如有侵权,请联系作者删除!