当前位置: 首页 > 面试题库 >

Optional.ofNullable和方法链接

郜俊晤
2023-03-14
问题内容

我对Optional.ofNullable方法感到惊讶。有一天,我写了一个函数,该函数应该返回Optional:

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()一些Integer值或null。Null可以是每个表达式之一:insight.getValues()insight.getValues().get(0)

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


问题答案:

如果您不知道可以做什么null,或者想检查所有内容null,则唯一的方法是将调用链接到Optional.map

如果存在值,则将提供的映射函数应用于该值,如果结果为非null,则返回描述结果的Optional。否则,返回一个空的Optional。

这样,如果映射器return nullOptional则将返回一个空值,这允许链接调用。

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

orElse(0)如果返回任何映射器,对的最终调用将允许返回默认值0
null



 类似资料:
  • 我对方法感到惊讶。有一天,我写了一个函数,它应该返回一个可选的: 我错误地认为将阻止参数表达式内部的任何。 现在我想我知道这是一个非常愚蠢的想法。Java必须首先解析参数才能将其传递给调用。 但我有个问题。有没有一个好的方法来完成我的目标?我想从表达式中获取一些整数值或空值。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” 在线尝试!