Java 8 返回可选<;学生>;或者可选。empty()
我正在玩一点Optional来了解它是如何工作的。假设我有一门课:Java 8 返回可选<;学生>;或者可选。empty(),java-8,optional,Java 8,Optional,我正在玩一点Optional来了解它是如何工作的。假设我有一门课: public class Student { private int id; private String name; public Student(int id, String name) { this.id = id; this.name = name; } public int getId() { return id; }
public class Student {
private int id;
private String name;
public Student(int id, String name) {
this.id = id;
this.name = name;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
我想通过Id或可选返回一个学生。如果找不到,则返回空。这就是我到目前为止所做的:
public class Main {
static List<Student> students = new ArrayList<>();
public static void main(String[] args) {
students.add(new Student(1, "name1"));
students.add(new Student(2, "name2"));
students.add(new Student(3, "name3"));
System.out.println(getStudentById(1).get().getName());
}
public static Optional<Student> getStudentById(int id) {
return students
.stream()
.filter( s -> s.getId() == id)
.findFirst();
}
}
我得到了这个:
错误:(23,39)java:不兼容的类型:不存在类型变量T的实例,因此java.util.Optional符合com.company.Student
另外,我想知道这是否是查看列表的正确方法,我是指逐个元素还是有更好的方法?如果您阅读了javadocs,您会发现您已经拥有了所需的:
返回描述此流的第一个元素的可选值,或
如果流为空,则为空可选。如果溪流没有遭遇
顺序,则可以返回任何元素
那就这么做吧
return students
.stream()
.filter( s -> s.getId() == id)
.findFirst();
您使用的是什么语言?我使用的是java 8
findFirst
如果流中没有任何内容,将返回可选的。非常感谢
return students
.stream()
.filter( s -> s.getId() == id)
.findFirst();