【发布时间】:2021-06-17 17:40:27
【问题描述】:
我的主班中有一个学生班。学生类包含一个 ID 和名称。在我的主要课程中,我将 3 名学生添加到列表中。现在我需要获取第一个名字不应该为空的学生。为此,我使用了 java stream() 类,其中包含 findFirst() 方法来获取第一个匹配值。所以返回类型是Optional。
这是我写的
Optional<Student> ans = l.stream()
.filter(e -> e != null && e.name != null)
.findFirst();
我也可以这样写
Student ans = l.stream()
.filter(e -> e != null && e.name != null)
.findFirst()
.orElse(null);
但我不想有 orElse(null)
我的完整代码:
import java.util.*;
import java.io.*;
public class Sample {
public static class Student {
int id;
String name;
}
public static void main(String args[]) {
List<Student> l = new ArrayList<>();
Student s = new Student();
s.id = 0;
s.name = "First";
Student t = new Student();
t.id = 1;
t.name = "";
Student r = new Student();
r.id = 2;
r.name = "Hdyun";
l.add(s);
l.add(t);
l.add(r);
Optional<Student> ans = l.stream()
.filter(e -> e != null && e.name != null)
.findFirst();
System.out.println(ans.name);
}
}
最后,当我打印名字时,我遇到了以下错误:
Sample.java:32: error: cannot find symbol
System.out.println(ans.name);
^
symbol: variable name
location: variable ans of type Optional<Student>
我该如何纠正它?
【问题讨论】:
-
你考虑过taking a look at the documentation of Optional吗?一个类有哪些方法,如何使用,通常在一些官方文档中都有很好的定义和解释。
-
如果结果为空,你希望
ans.name做什么?
标签: java