Java 多个命令和 return 对象可选
Java Optional with multiple commands and return object
正在尝试使用Optional.ifPresentOrElse
执行多个命令和return一个对象(ResponseEntity)
更复杂的不起作用:
return ifPresentOrElse(
repoService.findById(inId),
i -> {
i.setStatus(inStatus);
repoService.save(i);
ResponseEntity.ok().body(i);
},
() -> {
LOG.error("Object not available");
ResponseEntity.notFound().build();
});
更简单但不执行所有需要的命令:
Optional<I> iOptional = repoService.findById(inId);
return iOptional.map(i -> ResponseEntity.ok().body(i))
.orElse(ResponseEntity.notFound().build());
有没有办法使用可选函数来实现这个?
使用 Optional.map
和 Optional.orElseGet
,像这样:
var responseEntity = repoService.findById(inId)
.map(record -> {
record .setStatus(inStatus);
repoService.save(record);
return ResponseEntity.ok().body(record);
}).orElseGet(() -> {
LOG.error("Object not available");
return ResponseEntity.notFound().build();
});
首先,ifPresentOrElse
的签名是:
public void ifPresentOrElse(Consumer<T> action, Runnable emptyAction)
表示不能return这个函数的值。
因此,当您调用 ResponseEntity.ok().body(i)
或 ResponseEntity.notFound().build()
时,您不会重新调整任何内容,
它们只是右值。
另一方面,map
函数的签名是:
public <U> Optional<U> map(Function<? super T,? extends U> mapper)
表示可以return调用mapper函数
正在尝试使用Optional.ifPresentOrElse
执行多个命令和return一个对象(ResponseEntity)更复杂的不起作用:
return ifPresentOrElse(
repoService.findById(inId),
i -> {
i.setStatus(inStatus);
repoService.save(i);
ResponseEntity.ok().body(i);
},
() -> {
LOG.error("Object not available");
ResponseEntity.notFound().build();
});
更简单但不执行所有需要的命令:
Optional<I> iOptional = repoService.findById(inId);
return iOptional.map(i -> ResponseEntity.ok().body(i))
.orElse(ResponseEntity.notFound().build());
有没有办法使用可选函数来实现这个?
使用 Optional.map
和 Optional.orElseGet
,像这样:
var responseEntity = repoService.findById(inId)
.map(record -> {
record .setStatus(inStatus);
repoService.save(record);
return ResponseEntity.ok().body(record);
}).orElseGet(() -> {
LOG.error("Object not available");
return ResponseEntity.notFound().build();
});
首先,ifPresentOrElse
的签名是:
public void ifPresentOrElse(Consumer<T> action, Runnable emptyAction)
表示不能return这个函数的值。
因此,当您调用 ResponseEntity.ok().body(i)
或 ResponseEntity.notFound().build()
时,您不会重新调整任何内容,
它们只是右值。
另一方面,map
函数的签名是:
public <U> Optional<U> map(Function<? super T,? extends U> mapper)
表示可以return调用mapper函数