我有一个if-then-else语句,我想将其转换为三目运算符,但我不知道为什么不能这样做。代码如下:
以下是IDE给出的错误信息:
第1行:表达式的目标类型必须是函数式接口。
第2行:此行有多个标记。
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);
}
使用三元运算符的代码如下:
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);
}
以下是IDE给出的错误信息:
第1行:表达式的目标类型必须是函数式接口。
第2行:此行有多个标记。
- 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
第3行: 语法错误,删除这些标记。
是否可以在此处执行三元运算符或如何解决问题?
非常感谢您的帮助!
ifPresent()
函数期望提供的函数返回类型为void
。此外,你的三元运算符不是一个函数。最后,ifPresent()
只有在你有一个非空的Optional
时才会运行,你可以使用ifPresentOrElse()
函数。 https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/Optional.html#ifPresentOrElse(java.util.function.Consumer,java.lang.Runnable) - tgr