可选的 ifPresent 调用对象方法

Optional ifPresent to call an object method

我必须调用具有以下签名的过程:

private Optional<Address> getAddress()

我用它来填写客户在我系统上的记录。所以,我编写了以下代码来设置记录的地址(如果存在的话)。

Optional<Address> address = getAddress();
if (address.isPresent())
  record.setAddress(address.get());

但是,我收到以下通知:

Can be replaced by ifPresent

Reports conditions like if Optional.isPresent() which could be rewritten in functional style.

所以我认为 太棒了,我将使用这个很酷的 ifPresent 东西来简化我的代码。然后我想到了这一行:

getAddress().ifPresent(x -> record.setAddress(x));

觉得不错,三行合二为一。但后来我从 SonarLint

收到了以下消息

Replace this lambda with a method reference

我想 为什么我需要创建一个方法来设置单个变量?

无论如何,由于我对 Optional 的使用有点陌生,我可能在这里误解了一些东西...那么,根据建议和建议,我应该如何编写这段简单的代码最佳做法?

您不应该为了设置单个变量而创建新方法。 SonarLint 只是建议最好使用方法引用而不是 lambda 表达式。

您可以在 Oracle 网站 Java 8 中阅读方法参考:The Java Tutorials - Method References.

对于您的情况 - SonarLint 只是希望您用以下内容替换该行:

Record record = ...;
getAddress().ifPresent(record::setAddress);