【问题标题】:If optional.isPresent() then use optional value as method parameter如果 optional.isPresent() 则使用可选值作为方法参数
【发布时间】:2017-04-20 14:29:17
【问题描述】:

我有一个包含几个可选项的对象,其中可选项不为空,我想将其值作为参数传递给采用多个参数的方法。

目前我的代码块如下所示:

if (dealerRequest.getIsApproved().isPresent()) {                
    repository.updateDealerPartnerFinanceIsApproved(dealerRequest.getDealerId(), dealerRequest.getIsApproved().get());
}
if (dealerRequest.getIsOptedIn().isPresent()) {                
    repository.updateDealerPartnerFinanceOptedIn(dealerRequest.getDealerId(), dealerRequest.getIsOptedIn().get());
}

我知道检查值是否存在,然后再获取它比过去的空值检查更有用;但是我看不出在这种情况下如何使用它们?

理想情况下,我会 .map() 对我的存储库上的方法进行可选操作,但是我不知道如何传递(如果可以的话)第二个参数?有没有更简洁的方法?

【问题讨论】:

  • 因此,如果您的可选项中没有任何价值,您就不会在您的存储库上执行任何操作吗?它是否正确?或者,如果您的可选项为空,您是否使用默认值更新您的存储库?
  • 正确,如果 optional 没有值,则不调用关联的存储库更新。

标签: java java-8 optional


【解决方案1】:

你也可以使用ifPresent()

dealerRequest.getIsApproved().ifPresent(
  approved -> repository.updateDealerPartnerFinanceIsApproved(dealerRequest.getDealerId(), approved));

对应第二个可选的。

【讨论】:

    【解决方案2】:

    您不能使用map,因为map 期望您返回Optional。您可以像这样使用ifPresent(“if”而不是“is”):

    dealerRequest.getIsApproved().ifPresent(
        retrn -> repository.updateDealerPartnerFinanceIsApproved(foo.getDealerId(), retrn)
    );
    //(foo = dealerRequest. it overflowed otherwise)
    

    Runnable example

    【讨论】:

    • 你似乎没有实际上使用ifPresent。此外,可运行示例的链接指向服务的主页。
    • 我很尴尬。谢谢。
    猜你喜欢
    • 2023-03-13
    • 1970-01-01
    • 1970-01-01
    • 2014-08-05
    • 1970-01-01
    • 2014-09-22
    • 1970-01-01
    • 1970-01-01
    • 2019-05-19
    相关资源
    最近更新 更多