当我从数据库检索学生实体时,存储库将返回可为空的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。
我认为没有任何开销是不可能的,但我愿意提出建议。
答案 0 :(得分:6)
您可以map
并使用orElse
返回该值(如果存在),或者提供默认值:
studentRepository.getStudentById(id)
.map(Student::getBirthdate)
.orElse(defaultValue);
在您的情况下,defaultValue
为null
。
答案 1 :(得分:6)
尝试一下
studentRepository.getStudentById(id)
.map(Student::getBirthdate).orElse(null);