¿Cómo transformar en ternaria operador?

Iván Sánchez Castellanos :

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!

Andrew Tobilko:
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() : actordevuelve una Actor.

Otra alternativa sería bueno usar Optional#orElsecomo -

actorForSaving.add(actorInDatabase.orElse(actor));

Supongo que te gusta

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