Мне нужно преобразовать объект Optional<EmployeeModel>
в Optional<EmployeeDto>
, и я ищу более лучшие / более чистые варианты, чем два ниже.
Option1:
public Optional<EmployeeDto> findById(String employeeId){
Optional<EmployeeModel> employeeModel = employeeService.findById(employeeId);
return Optional.ofNullable(toEmployeeDto(toEmployeeDto.orElse(null)));
}
private EmployeeDto toEmployeeDto(EmployeeModel employeeModel) {
if(employeeModel != null) {//We need this because orElse passes null
//return EmployeeDto (convert EmployeeModel to dto)
} else {
return null;
}
}
Опция 2:
public Optional<EmployeeDto> findById(String employeeId){
Optional<EmployeeModel> employeeModel = employeeService.findById(employeeId);
if(employeeModel.isPresent()) {
return Optional.of(toEmployeeDto(employeeModel.get()));
} else {
return Optional.empty();
}
}
private EmployeeDto toEmployeeDto(EmployeeModel employeeModel) {
//isPresent()check already done so no null checks
//return EmployeeDto (convert EmployeeModel to dto)
}
Я не могу использовать Optional.map()
напрямую, поскольку EmployeeModel
объект может быть нулевым (т. Е. null
обернут в Optional
)от employeeService
.Кроме того, я просто проверял исходный код метода map()
внутри класса Optional
, который выполняет следующую проверку:
Objects.requireNonNull(mapper);
Короче, мой вопрос в том, можем ли мы передать null
объекты в Optional
s map()
метод?Если да, то почему Objects.requireNonNull()
проверяет исходный код?