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

Java 8避免空指针检查使用可选

彭弘方
2023-03-14

有没有可能编写这样的内容,并且避免检查元素是否为空,集合是否为空:

 response.getBody()
    .getRequestInformation()
    .getRequestParameters().get(0)
    .getProductInstances().get(0)
    .getResultParameters()

我找到了这样的东西http://winterbe.com/posts/2015/03/15/avid-null-check-in-/

基本上,我想要实现的是避免层次结构中如果带有多个检查天气对象的语句为null或集合为空。我在上面的文章中读到,这是可能的,可选的“空检查在引擎盖下自动处理。”

如果已经有了一些解决方案,很抱歉复制,请向我推荐。

共有1个答案

长孙绍辉
2023-03-14

如果要将可选链接起来,则只有当它不是null时,才可以使用它的map(函数<?super T,?extends u>mapper)方法调用映射器函数,并使用flatmap(stream::findfirst)获取集合的第一个元素作为下一个:

Optional<List<ResultParameterClass>> parameters = Optional.ofNullable(response)
    .map(ResponseClass::getBody)
    .map(BodyClass::getRequestInformation)
    .map(RequestInformationClass::getRequestParameters)
    .map(Collection::stream)
    .flatMap(Stream::findFirst)
    .map(RequestParameterClass::getProductInstances)
    .map(Collection::stream)
    .flatMap(Stream::findFirst)
    .map(ProductInstanceClass::getResultParameters);

是否可以在optional中返回列表,或者如果不存在,则返回类似newarraylist () 的内容?

是的,您只需使用orelseget(supply<?extends T>other)orelse(T other)来提供一个默认值,结果不再是可选,而是一个列表

因此代码将是:

List<ResultParameterClass> parameters = Optional.ofNullable(response)
    ...
    .map(ProductInstanceClass::getResultParameters)
    .orElseGet(ArrayList::new);

 类似资料:
  • 我想知道是否有可能在Java中“避免”空检查,以下面的代码为例: 它必须检查4次,否则代码将失败。 是否可以将语句转换为只有在没有NullPointerException时才执行的一行式语句?当出现异常时,该行应该被忽略。 这里我不是在谈论一个通用的语言特性,我是在谈论一个只有当您明确决定这样做时才会上交的特性。 例如:将是建议代码的一个片段。 在Java可能发生这样的事情吗? 如果不可能的话,在

  • 本文向大家介绍利用Java8 Optional如何避免空指针异常详解,包括了利用Java8 Optional如何避免空指针异常详解的使用技巧和注意事项,需要的朋友参考一下 前言 空指针是我们最常见也最讨厌的异常,为了防止空指针异常,你不得在代码里写大量的非空判断。 Java 8引入了一个新的Optional类。用于避免空指针的出现,也无需在写大量的if(obj!=null)这样的判断了,前提是你得

  • 我有如下所示的JSON 我将文件读成字符串并创建一个JSONObject,如下所示 然而,我认为我可以用try catch将语句括起来 请建议在这种情况下是否有任何合理的理由放一个长的if条件,而不是仅仅try-catch-log然后继续。 您还可以分享使用JSONException在此上下文中是否有任何“优点”吗?

  • 本文向大家介绍Java中避免空指针异常的方法,包括了Java中避免空指针异常的方法的使用技巧和注意事项,需要的朋友参考一下 没人会喜欢空指针异常!有什么方法可以避免它们吗?或许吧。。 本文将讨论到以下几种技术 1.Optional类型(Java 8中新引入的) 2.Objects类(Java 7中原有的) Java 8中的Optional类 它是什么? 1.Java 8中新引入的类型 2.它是作为

  • 在Java,有没有一种方法可以避免在调用的每个级别上嵌套null检查,以确保沿途没有阻止下一次调用的null。有没有一个优雅的方法来做这件事? 例如: Objone.ObjTwo.ObjTree.ObjFour.ObjF

  • 在一些遗留代码中,我遇到了以下空指针检查。 通过此if检查检查空指针是否存在技术风险?