如何在三元运算符中进行转换?
How to transform in ternary operator?
我有一个 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 行:令牌语法错误,删除这些令牌。
是否可以在这里执行三元运算符或者我该如何解决?
非常感谢您的帮助!
actorForSaving.add(actorInDatabase.isPresent() ? actorInDatabase.get() : actor);
三元运算符不能是语句,它是 returns 某物的表达式。在您的情况下,actorInDatabase.isPresent() ? actorInDatabase.get() : actor
returns 和 Actor
.
另一个好的选择是使用 Optional#orElse
作为 -
actorForSaving.add(actorInDatabase.orElse(actor));
你的if
很好。但是如果你 真的 想在这里使用条件运算符,方法是在 add
:
的参数列表中使用
movieForSaving.getActors().forEach((actor) -> {
Optional<Actor> actorInDatabase = actorService.findByNameAndSurname(actor.getName(), actor.getSurname());
actorForSaving.add(actorInDatabase.isPresent() ? actorInDatabase.get() : actor);
});
您也许还可以使用 orElse
。但是您的问题似乎专门针对条件运算符。 (a 三元运算符——一个接受三个操作数的运算符——但不是 三元运算符。目前它是 Java 唯一的三元运算符,但理论上可以添加另一个。)
错误已经解释过了。只是使用 all 和 Optional 的 Streamy 方式:
Movie movieForSaving = NewMovieDTOToMovie.map(newMovieDTO);
List<Actor> actorsForSaving = movieForSaving.getActors().stream()
.map(actor -> actorService.findByNameAndSurname(actor.getName(),
actor.getSurname()).orElse(actor))
.collect(Collectors.toList());
movieForSaving.setActors(actorForSaving);
我有一个 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 行:令牌语法错误,删除这些令牌。
是否可以在这里执行三元运算符或者我该如何解决?
非常感谢您的帮助!
actorForSaving.add(actorInDatabase.isPresent() ? actorInDatabase.get() : actor);
三元运算符不能是语句,它是 returns 某物的表达式。在您的情况下,actorInDatabase.isPresent() ? actorInDatabase.get() : actor
returns 和 Actor
.
另一个好的选择是使用 Optional#orElse
作为 -
actorForSaving.add(actorInDatabase.orElse(actor));
你的if
很好。但是如果你 真的 想在这里使用条件运算符,方法是在 add
:
movieForSaving.getActors().forEach((actor) -> {
Optional<Actor> actorInDatabase = actorService.findByNameAndSurname(actor.getName(), actor.getSurname());
actorForSaving.add(actorInDatabase.isPresent() ? actorInDatabase.get() : actor);
});
您也许还可以使用 orElse
。但是您的问题似乎专门针对条件运算符。 (a 三元运算符——一个接受三个操作数的运算符——但不是 三元运算符。目前它是 Java 唯一的三元运算符,但理论上可以添加另一个。)
错误已经解释过了。只是使用 all 和 Optional 的 Streamy 方式:
Movie movieForSaving = NewMovieDTOToMovie.map(newMovieDTO);
List<Actor> actorsForSaving = movieForSaving.getActors().stream()
.map(actor -> actorService.findByNameAndSurname(actor.getName(),
actor.getSurname()).orElse(actor))
.collect(Collectors.toList());
movieForSaving.setActors(actorForSaving);