Wes*_*Gun 4 java spring functional-programming optional java-8
当我从DB检索Student实体时,存储库返回一个可空的Optional<Student>.它有一个birthdate领域.
Optional<Student> getStudentById(String id);
Run Code Online (Sandbox Code Playgroud)
那么,我怎么能用功能样式写一个单行来获取它的生日,当它为null时返回null,何时不返回日期?
我现在:
Date birthdate = studentRepository.getStudentById(id).isPresent() ?
studentRepository.getStudentById(id).get().getBirthdate() : null;
Run Code Online (Sandbox Code Playgroud)
但我认为使用isPresent()和三元是丑陋的; 它只是if/else.
而且,这不起作用:
Date birthdate = studentRepository.getStudentById(id).get().getBirthdate().orElse(null); // this does not work because orElse() cannot chain with getBirthdate()
Run Code Online (Sandbox Code Playgroud)
我是Java 8.
我不认为没有任何开销是可能的,但我愿意接受建议.
你可以map使用它orElse来返回值(如果存在)或者提供默认值:
studentRepository.getStudentById(id)
.map(Student::getBirthdate)
.orElse(defaultValue);
Run Code Online (Sandbox Code Playgroud)
在你的情况下,defaultValue将是null.
试试这个
studentRepository.getStudentById(id)
.map(Student::getBirthdate).orElse(null);
Run Code Online (Sandbox Code Playgroud)