【发布时间】:2020-01-30 13:13:12
【问题描述】:
我有一个 if-then-else 语句,我想将它转换为三元运算符,但我不知道为什么我不能这样做。代码如下:
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时运行,您的 go to function 将是ifPresentOrElse()。 docs.oracle.com/en/java/javase/11/docs/api/java.base/java/util/…
标签: java spring java-8 ternary-operator