Tengo una sentencia if-then-else y quiero transformarlo a un operador ternario, pero no sé por qué no puedo hacerlo. El código es el siguiente:
public Movie create(NewMovieDTO newMovieDTO) {
Movie movieForSaving = NewMovieDTOToMovie.map(newMovieDTO);
List<Actor> actorsForSaving = new ArrayList<Actor>();
movieForSaving.getActors().forEach((actor) -> {
Optional<Actor> actorInDatabase = actorService
.findByNameAndSurname(actor.getName(), actor.getSurname());
if(actorInDatabase.isPresent()) {
actorForSaving.add(actorInDatabase.get());
} else {
actorForSaving.add(actor);
}
});
movieForSaving.setActors(actorForSaving);
return movieRepository.save(movieForSaving);
}
Y el código con el operador ternario es:
public Movie create(NewMovieDTO newMovieDTO) {
Movie movieForSaving = NewMovieDTOToMovie.map(newMovieDTO);
List<Actor> actorsForSaving = new ArrayList<Actor>();
/*Line 1*/ movieForSaving.getActors().forEach((actor) -> {
Optional<Actor> actorInDatabase = actorService
.findByNameAndSurname(actor.getName(), actor.getSurname());
/*Line 2*/(actorInDatabase.isPresent()) ? actorForSaving.add(actorInDatabase.get()) : actorForSaving.add(actor);
/*Line 3*/});
movieForSaving.setActors(actorForSaving);
return movieRepository.save(movieForSaving);
}
Los siguientes errores son dados por el IDE:
Línea 1: El tipo de destino de esta expresión debe ser una interfaz funcional
Línea 2: múltiples marcadores en esta línea
- Syntax error, insert "AssignmentOperator Expression" to complete Assignment
- Syntax error, insert "}" to complete Block
- actorForSaving cannot be resolved to a variable
- Syntax error on token(s), misplaced construct(s)
- actorInDatabase cannot be resolved
- actorForSaving cannot be resolved
- Syntax error, insert ";" to complete Statement
Línea 3: Error de sintaxis en fichas, eliminar estas fichas.
¿Es posible realizar un operador ternario aquí o cómo puedo solucionarlo?
¡Muchas gracias por tu ayuda!
actorForSaving.add(actorInDatabase.isPresent() ? actorInDatabase.get() : actor);
El operador ternario no puede ser una declaración, es una expresión que devuelve algo. En su caso, actorInDatabase.isPresent() ? actorInDatabase.get() : actor
devuelve una Actor
.
Otra alternativa sería bueno usar Optional#orElse
como -
actorForSaving.add(actorInDatabase.orElse(actor));