Java 8 返回可选<;学生>;或者可选。empty()

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; }

我正在玩一点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 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();