当isPresent()获得属性时为Optional <t>;如果为null,则为null; Java 8中的功能样式

时间:2018-12-12 09:20:14

标签: java spring java-8 functional-programming optional

当我从数据库检索学生实体时,存储库将返回可为空的Optional<Student>。它有一个birthdate字段。

Optional<Student> getStudentById(String id);

那么,我该如何以函数样式编写单行代码以获取它的生日,当它为null时返回null,否则返回日期?

我现在在:

Date birthdate = studentRepository.getStudentById(id).isPresent() ? 
                    studentRepository.getStudentById(id).get().getBirthdate() : null;

但是我认为使用isPresent()和三进制是丑陋的。只是if/else

而且,这将不起作用:

Date birthdate = studentRepository.getStudentById(id).get().getBirthdate().orElse(null); // this does not work because orElse() cannot chain with getBirthdate()

我使用Java 8。

我认为没有任何开销是不可能的,但我愿意提出建议。

2 个答案:

答案 0 :(得分:6)

您可以map并使用orElse返回该值(如果存在),或者提供默认值:

studentRepository.getStudentById(id)
                 .map(Student::getBirthdate)
                 .orElse(defaultValue);

在您的情况下,defaultValuenull

答案 1 :(得分:6)

尝试一下

studentRepository.getStudentById(id)
           .map(Student::getBirthdate).orElse(null);