Java 8 使用Optional 避免空指针检查

2023-12-05

是否可以编写这样的内容并避免检查元素是否不为空并且集合是否不为空:

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

我发现了这样的东西http://winterbe.com/posts/2015/03/15/avoid-null-checks-in-java/

基本上,我想要实现的是避免带有多个检查天气对象的 if 语句为空或层次结构中的集合为空。我在上面的帖子中读到,这可以通过可选的“空检查在幕后自动处理”来实现。

如果已经有一些解决方案,很抱歉重复,请参考。


如果你想连锁Optional,你可以使用它的map(Function<? super T,? extends U> mapper)仅当不存在时才调用映射器函数的方法null并使用flatMap(Stream::findFirst)得到你的第一个元素Collection如下:

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,或者如果不是 呈现然后返回类似新的东西ArrayList<ResultParameterClass>()?

是的,您只需使用orElseGet(Supplier<? extends T> other) or orElse(T other)提供默认值,结果不会是Optional不再是一个List<ResultParameterClass>.

所以代码将是:

List<ResultParameterClass> parameters = Optional.ofNullable(response)
    ...
    .map(ProductInstanceClass::getResultParameters)
    .orElseGet(ArrayList::new);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java 8 使用Optional 避免空指针检查 的相关文章

随机推荐

  • 访问共享内存进行读取时锁定

    如果我以只读方式访问共享内存 请检查某个条件if 块 我还应该锁定互斥锁吗 例如 mutex lock if var shared memory mutex unlock 这里是否需要锁定并且是良好的做法 如果您正在读取的变量可以同时写入
  • 如何使用 Matlab 按字母顺序对属性值对进行排序

    我想向现有文件添加属性值对 同时 所有属性应按字母顺序排序 例如 Info property 1 value 1 system property 2 value 2 我如何添加其他属性 以便所有属性都按字母顺序排序 我能够使用以下命令将属性
  • 使用 HTML5 音频更改 在 Chrome 中有效,但在 Safari 中无效

    我正在尝试制作一个可在每个主要浏览器中使用的 HTML5 音频播放列表 Chrome Safari Firefox IE9 但是 我不知道如何以跨浏览器兼容的方式更改源 UPDATED例如 更改
  • 迭代器无法正确访问问题

    我正在尝试使用迭代器访问向量的元素 但我得到奇怪的输出 std vector
  • Excel VBA 循环遍历可见的筛选行

    我有一个带有自动过滤器的 Excel 表格 在过滤表中 我只过滤了几行 我的目标是迭代所有可见行以收集数据以复制到另一张工作表 我想要一种方法来收集具有第一个可见行号的变量 我的草稿代码是 Dim cnp As String Dim nom
  • 我们是否应该在 React 功能组件的每个函数处理程序中使用 useCallback

    假设我们有这样的组件 const Example gt const counter setCounter useState 0 const increment gt setCounter counter gt counter 1 retur
  • 使用具有 PhoneStateListener 功能的 BroadcastReceiver

    我正在尝试制作一个 MissCall 应用程序 当收到未接来电时 该应用程序会自动发送消息 我已经完成了我的应用程序并且运行良好 这是完整的场景 问题 该应用程序运行良好但是当我重新启动设备时 应用程序无法运行 它仅在我启动我的应用程序至少
  • 是否可以将占位符文本从头到尾转换?

    我想在已知宽度的文本输入中从头到尾转换单行动态占位符文本 隐藏溢出 现在我知道对于常规容器 div 我可以利用转换来转换正确的长度 因此 对于长度为 100px 的容器 我可以使用以下命令过渡到文本末尾 transform translat
  • Swift 2 - 将数组分成带有从 A 到 Z 的键的字典

    例如 我有一个数组 Apple Banana Blueberry Eggplant 我想将其转换为字典 如下所示 A Apple B Banana Blueberry C D E Eggplant 我在 Xcode 7 beta 4 上使用
  • ArrayList并发访问

    我知道ArrayList不是线程安全的 但我不确定这的确切含义 如果是ThreadA and ThreadB两者都使用ArrayList 哪些情况会导致问题并需要同步 两个线程同时读取相同的索引 ThreadA替换一个元素ThreadB正在
  • 如何将 plone 的内容块插入到重氮主题中

    我在 Plone 4 1 中使用重氮 当前为 plone app theming 1 0b1 r48205 我想完全使用 Plone 的 html 作为搜索小部件 除了我想替换
  • 当函数返回由模板类型和另一个类型组成的类型时,模板参数推导

    标题很难用文字表达 但这是我试图在不可编译的代码中实现的目标 template
  • 如何在服务器上设置 SvelteKit 存储并保持反应性?

    我正在尝试构建一台使用 setInterval 回调更改服务器上数据的机器 在理想的情况下 服务器间歇性地检查数据并将其保存在缓存中 前端组件使用该缓存将其呈现在浏览器中 现在我的 server ts 文件says它会定期更改数据并将其添加
  • 使用 Gluon ShareService 共享多个文件(图像和 txt)

    我们想知道如何使用 Gluon ShareService 共享多个文件 图像和 txt 文件 特别是如何与 PictureService 共享先前拍摄并存储 在图库中 的图像 但我们需要先创建一个包含路径和图像名称的文件 不幸的是 Pict
  • 如何关闭由邮件合并启动的 Excel 实例

    如何关闭由邮件合并启动的 Excel 实例 在启动器内运行的此代码无法访问通过 DDE 运行的 Excel For i 1 To Workbooks Count MsgBox here Workbooks i Name If Workboo
  • 为什么父类的受保护变量为空?

    我有一个受保护的变量Father类中 该变量的内容将发生变化Father类 但我需要在子类中使用这个变量 即 class Father protected body function construct this gt body test
  • 使用 urllib 删除 python 中的换行符

    我正在使用Python 3 x 使用时urllib request要下载网页 我得到了很多 n之间 我正在尝试使用论坛其他线程中给出的方法删除它 但我无法这样做 我用过strip 函数和replace 功能 但没有运气 我在 eclipse
  • 如何创建以当前时间命名的文件?

    我想在 log 目录下创建一系列文件 每个文件根据执行时间命名 在每个文件中 我想为我的程序存储一些日志信息 例如起作用的函数原型等 通常我使用 fopen log a 的硬方法 这不是为了这个目的 我只是写了一个时间戳函数 char ti
  • 无法将文件 .mdf 作为数据库附加

    我是 MVC 技术的新手 正在阅读培训材料 并遇到了以下实体框架错误消息 在这里 我尝试从 SQL Server Compact 数据库获取一条记录 但出现错误EmployeeController步骤中的类 Employee employe
  • Java 8 使用Optional 避免空指针检查

    是否可以编写这样的内容并避免检查元素是否不为空并且集合是否不为空 response getBody getRequestInformation getRequestParameters get 0 getProductInstances g