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.mapOptional.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函数