【发布时间】:2020-09-23 13:35:00
【问题描述】:
我有一个学生对象列表studentList,如下所示。
Student1 = new Student("Student1", 10);
Student2 = new Student("Student2", 11);
Student {
String name;
int age;
}
我想对列表进行过滤并获取特定学生的年龄。 我使用 java 8 流尝试了与下面相同的操作。
int age = studentList.stream()
.filter(x -> x.getName.equals("Student1"))
.findFirst()
.get()
.getAge();
但是当我传递一个不在列表中的学生姓名时,比如 Student5,它会抛出一个空指针异常。为此,我给出了如下的空检查
Student s = studentList.stream()
.filter(x -> x.getName.equals("Student1"))
.findFirst()
.get();
if(s != null){
age = s.getAge();
}
除了像这样拆分这个空检查,是否可以在 stream().filter() 代码本身中容纳空检查?
【问题讨论】:
-
get()在一个空的可选项上会抛出一个NoSuchElementException,而不是NullPointerException。 -
当没有学生匹配时,这不是你想要的完整情况吗?
标签: java-8 java-stream