当前位置: 首页 > 知识库问答 >
问题:

Optional.ofNullable和方法链接

陈俊郎
2023-03-14

我对optional.ofnullable方法感到惊讶。有一天,我写了一个函数,它应该返回一个可选的:

private Optional<Integer> extractFirstValueFrom(InsightsResponse insight) {
    return Optional.ofNullable(insight.getValues().get(0).getValue());
}

我错误地认为optional.ofnullable将阻止参数表达式内部的任何nullPointerExceptions

现在我想我知道这是一个非常愚蠢的想法。Java必须首先解析参数才能将其传递给optional.ofnullable调用。

但我有个问题。有没有一个好的方法来完成我的目标?我想从表达式Insight.GetValues().Get(0).GetValue()中获取一些整数值或空值。Null可以是每个表达式:Insight.GetValues()Insight.GetValues().Get(0)

我知道我可以把它放在try/catch块中,但我想知道是否有更优雅的解决方案。

共有1个答案

燕正卿
2023-03-14

如果您不知道什么东西可以是null,或者希望检查所有东西是否有null,唯一的方法是将调用链接到optional.map:

如果存在值,则对其应用提供的映射函数,如果结果为非空,则返回描述结果的可选值。否则返回一个空的可选。

因此,如果映射器返回null,则将返回一个空的optional,这允许链接调用。

Optional.ofNullable(insight)
        .map(i -> i.getValues())
        .map(values -> values.get(0))
        .map(v -> v.getValue())
        .orElse(0);

orelse(0)的最后一次调用允许在任何映射器返回null的情况下返回默认值0。

 类似资料:
  • 问题内容: 我对方法感到惊讶。有一天,我写了一个函数,该函数应该返回Optional: 我错误地认为这会阻止参数表达的任何内部。 现在我想我知道这是非常愚蠢的想法。Java必须先解析参数才能将其传递给调用。 但是我有一个问题。有没有一种很好的方法可以实现我的目标?我想从表达式中获取一些Integer值或null。Null可以是每个表达式之一:或。 我知道我可以将其放在try / catch块中,但

  • 本文向大家介绍python 链接和操作 memcache方法,包括了python 链接和操作 memcache方法的使用技巧和注意事项,需要的朋友参考一下 1,打开memcached服务 2,使用python-memcached模块,进行简单的链接和存取数据 3,其它方法请参考: 以上这篇python 链接和操作 memcache方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家

  • 方法链是Javascript中常用的编程模式,Giojs也支持使用方法链对参数进行配置。使用方法链,参数的设置会更加清晰可读。 以下的例子展示了如何使用Giojs方法链。(你也可以点击在线演示,然后查看例子的源码来详细了解方法链是如何应用在实际场景中的) 不使用方法链的API调用: controller.setSurfaceColor( "#00FF00" ); controller.setSel

  • 使用依赖注入框架(比如HK2)管理的服务时,使用方法链接是否可以接受? 我不确定是否允许它“缓存”实例,即使它只在注入范围内。 创建比萨饼的示例服务: 在这里,服务被注入到JAX-RS资源中:

  • 问题内容: 我正在使用PHP 5,并且听说过面向对象方法中的一项新功能,即“方法链接”。究竟是什么?如何实施? 问题答案: 实际上,它相当简单,您有一系列的mutator方法,它们都返回原始(或其他)对象,这样您就可以继续在返回的对象上调用方法。 输出“ ab” 在线尝试!