如果不是null – java 8样式

Java 8提供了Optional类。

之前(Java 7):

 Order order = orderBean.getOrder(id); if (order != null) { order.setStatus(true); pm.persist(order); } else { logger.warning("Order is null"); } 

所以在Java 8风格上:

 Optional optional = Optional.ofNullable(orderBean.getOrder(id)); optional.ifPresent( s -> { s.setStatus(true); pm.persist(s); //Can we return from method in this place (not from lambda) ??? }); //So if return take place above, we can avoid if (!optional.isPresent) check if (!optional.isPresent) { logger.warning("Order is null"); } 

在这种情况下使用Optional是否正确? 任何人都可以在Java 8风格中提出更方便的方法吗?

不幸的是,您正在寻找的ifPresentOrElse方法将仅在JDK-9中添加 。 目前,您可以在项目中编写自己的静态方法:

 public static  void ifPresentOrElse(Optional optional, Consumer action, Runnable emptyAction) { if (optional.isPresent()) { action.accept(optional.get()); } else { emptyAction.run(); } } 

并使用这样的:

 Optional optional = Optional.ofNullable(orderBean.getOrder(id)); ifPresentOrElse(optional, s -> { s.setStatus(true); pm.persist(s); }, () -> logger.warning("Order is null")); 

在Java-9中它会更容易:

 optional.ifPresentOrElse(s -> { s.setStatus(true); pm.persist(s); }, () -> logger.warning("Order is null")); 

//Can we return from method in this plase (not from lambda) ???

Lambdas没有实现“非本地返回”语义,因此答案是否定的。

通常,由于在值存在和不存在的情况下都需要具有副作用的操作,因此代码中的分支点是必不可少的 – 无论是否将其包装在某些花哨的API中。 此外,FP通常有助于改进引用透明转换(即,围绕纯函数构建的代码)而不是副作用,因此通过可选API将无法获得很多好处。