Необязательный <T>, когда isPresent () получает свойство или ноль, когда оно равно нулю;функциональный стиль в Java 8 - PullRequest
0 голосов
/ 12 декабря 2018

Когда я получаю сущность Студента из БД, хранилище возвращает обнуляемый Optional<Student>.У него есть поле birthdate.

Optional<Student> getStudentById(String id);

Итак, как я могу написать в функциональном стиле однострочник, чтобы получить дату его рождения, когда он равен нулю, возвращает ноль, а когда нет, возвращатьдата?

Я сейчас с:

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 голосов
/ 12 декабря 2018

Попробуйте это

studentRepository.getStudentById(id)
           .map(Student::getBirthdate).orElse(null);
0 голосов
/ 12 декабря 2018

вы можете map это и использовать orElse, чтобы вернуть значение, если оно присутствует, или предоставить значение по умолчанию:

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

в вашем случае, defaultValue будет null.

...