java convertir un tipo a otro tipo opcional opcional

desarrollador :

Tengo que convertir un Optional<EmployeeModel>objeto a Optional<EmployeeDto>y estoy buscando algunas opciones mejor / más limpio que el de abajo dos.

Opción 1:

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;
    }
}

Opcion 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)
}

No puedo utilizar Optional.map()directamente como EmployeeModelobjeto puede ser nulo (es decir, nullenvuelta por Optional) de la employeeService. Además, estaba comprobando el código fuente para el map()método dentro de Optionalla clase que realiza la verificación a continuación:

Objects.requireNonNull(mapper);

En resumen, mi pregunta es que podemos pasar nullobjetos a Optional's map()método? Si es así, ¿por qué el Objects.requireNonNull()cheque en el código fuente?

Andreas:

Utilice el Optional.map()método:

Si un valor está presente, aplicar la función de mapeo proporcionado a ella, y si el resultado es no nulo, devolver un Optionaldescribiendo el resultado. De lo contrario, devolver un vacío Optional.

public Optional<EmployeeDto> findById(String employeeId){
    Optional<EmployeeModel> employeeModel = employeeService.findById(employeeId);
    return employeeModel.map(this::toEmployeeDto);
}
private EmployeeDto toEmployeeDto(EmployeeModel employeeModel) {
    //employeeModel will not be null, so:
    //return EmployeeDto (convert EmployeeModel to dto)
}

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=225126&siteId=1
Recomendado
Clasificación