从Optional<>转换为ArrayList<>

2024-02-26

我有以下情况:

public ArrayList<A> getMethods(){
    return b.c.test();
}

所以,我的问题是b.c.test()返回一个值Optional<A>作为返回类型。但我需要返回一个ArrayList<A>.

所以,我尝试将其转换并重写为:

public ArrayList<A> getMethods(){
    return (ArrayList<A>)b.c.test();
}

但 Eclipse 说这样的演员来自Optional<A> to ArrayList<A> is 不可能。

我怎么解决这个问题?


我假设您的预期语义是“如果存在值,则返回包含单个项目的列表,否则返回空列表。”在这种情况下,我会建议如下:

ArrayList<A> result = new ArrayList<>();
b.c.test().ifPresent(result::add);
return result;

不过我建议你的返回类型应该是List<A>而不是ArrayList<A>因为这使您有机会更改列表类型而不更改调用者。它还可以让你返回Collections.EMPTY_LIST如果可选值不存在,这比创建不必要的值更有效ArrayList.

Update:Java 9 现在有一个更简单的选项:

b.c.test().stream().collect(Collectors.toList());

Update:使用 Java 16 甚至更简单的选择:

b.c.test().stream().toList();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

从Optional<>转换为ArrayList<> 的相关文章

随机推荐

  • “DataView 在 System.data 中未标记为可序列化”是什么意思?

    当我将 dataview 存储在 viewstate 中时 net 显示错误 Dataview 在 system data 中未标记为可序列化 但当我将其存储在会话中时 它可以正常工作吗 背后的原因是什么 还有哪些其他对象没有标记为 可序列
  • 如何将选项传递给“集合”字段 Symfony 2.1 中的 CustomType?

    I have SuperType实体表格Super 在这种形式中我有一个collection现场ChildType实体的表单类型Child class SuperType public function buildForm FormBuil
  • 从 byte[] 下载 PDF 文件

    我一直在努力做一个PDF文件下载自bytes 在 ASP Net MVC C 中 下面的代码工作正常 我需要将代码转换为 NET Core对于相同的PDF下载过程 string fileName testFile pdf byte pdfa
  • 在主屏幕中安装启动器图标一次

    当用户安装 Android 应用程序时 会在应用程序菜单中创建启动器图标 我采访过的许多用户都希望 当他们安装应用程序时 他们的主屏幕 启动板 上应该自动出现一个图标 许多应用程序都以某种方式实现了这一点 我的偏好是在安装时出现一个窗口 询
  • 如何在 VB.Net 中运行 Powershell 脚本

    我需要在 VB Net 中运行 Exchange 2007 powershell 脚本 但我似乎找不到显示如何在加载模块的情况下执行此操作的方法 做到这一点的最佳方法是什么 您可以在VB中运行powershell脚本 请查看以下链接 htt
  • 单击按钮即可更新 D3 等值线州地图数据

    我使用 d3 datamaps 和 topojson 创建了一个 choropleth 州地图 我在根据按钮单击更改原始地图数据时遇到问题 首选方法是仅在更改函数内刷新原始地图的数据 相反 我让按钮执行函数消除包含地图的 div 然后重新创
  • Sqlite3_step() 在此查询上不断返回 SQLITE_MISUSE。有什么指点吗?

    我试图在 viewDidLoad 例程中打开一个 sqlite 数据库 并尝试将 sql 查询发送到该数据库 但 sqlite step 每次都会失败 我不确定这里出了什么问题 我只是尝试将其作为 sqlite3 的 hello world
  • 提交响应后 FormResponse.getId() 返回错误值

    我正在编写一个程序 需要各种谷歌表单响应的ID 我的程序首先创建表单对象并获取响应 var form FormApp openByUrl var allResponses form getResponses 如果表单响应是几个小时前的 那么
  • 转换时区时注意夏令时

    我有一个 Redshift 数据表 其中所有时间值都存储在 CST 中 并且我根据邮政编码 位置 将时间值转换为相应的时区 当我这样做时 我知道所有时间值都是标准时间 因此我的函数用法是 CASE WHEN convert timezone
  • 如何矢量化(利用 pandas/numpy)而不是使用嵌套 for 循环

    我希望有效地使用pandas or numpy 而不是嵌套for循环与if解决特定问题的语句 这是一个玩具版本 假设我有以下两个 DataFrame import pandas as pd import numpy as np dict1
  • 无法读取架构文档'http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd

    我正在为大学编写一个简单的 Swing 应用程序 并使用 Hibernate 和 Oracle XE 我被这个错误困住了 29 06 2011 14 54 10 org hibernate cfg annotations Version
  • 放大图像映射的某个区域

    我目前正在尝试制作一个响应式图像地图 我们还可以在其中缩放特定区域 目前我有类似的东西 插图 例如 我有 3 个部分用于 3 个不同的区域 但现在我不想在用户单击特定区域时放大该区域 我已经尝试了一些 jquery 脚本 但问题是它会缩放所
  • 如何隐藏Android手机上的软键栏?

    当我的应用程序启动时 我想隐藏软键栏 红色矩形 以获得更大的屏幕 我怎样才能隐藏它 当应用程序退出时 我是否需要特意显示该栏 或者应用程序退出后它会自动恢复 Android 4 1 手机正面没有硬件按键 我知道已经晚了 但这是正确的答案 所
  • 如何在 Spring Tools Suite 上添加 Spring roo

    我已经安装了 sts 但创建的新 roo 项目不存在 我需要做什么才能添加 spring roo 在以前的版本中我可以创建它 但在 3 5 0 中不行 在 Spring 工具套件中 单击仪表板中的 扩展 链接 搜索 Spring Roo 并
  • “known_hosts”文件中的 ECDSA 条目由哪些部分组成?

    我正在尝试从我的文件中提取 ECDSA 公钥已知主机归档该文件ssh用于验证主机 我下面有一个例子 这是我的known hosts 文件中 127 0 0 1 ecdsa sha2 nistp256 的条目 AAAAE2VjZHNhLXNo
  • Express 应用程序 - 更改基本 url

    我正在构建一个问答应用程序本教程 http engineering paiza io entry 2016 03 10 115345一切顺利 但我需要更改更改通过配置文件提供应用程序的基本根的机会 现在 该应用程序在 localhost 8
  • 使用 jquery 将表单值传递到 iframe 的 src url

    我一直让自己发疯去尝试做看似简单的事情 我有一张表格 我可以在其中询问邮政编码 在您输入邮政编码后 我使用 colorbox 弹出带有 iframe 的灯箱 我需要将表单中的邮政编码值传递到 iframe 的源 URL 中 我的表单代码如下
  • 下拉框显示的高度[重复]

    这个问题在这里已经有答案了 可能的重复 调整下拉框中列表的高度 https stackoverflow com questions 5600646 adjust the height of the list in dropdown box
  • std::set 2D 点的自定义比较器

    我需要一个非重复的 2D 点列表 所以我使用std set具有自定义比较功能 我使用的函数在插入点后出现问题 因为有时std find找不到已经插入的点 const double tolerance 0 1 struct MyPoint2D
  • 从Optional<>转换为ArrayList<>

    我有以下情况 public ArrayList a getMethods return b c test 所以 我的问题是b c test 返回一个值Optional a 作为返回类型 但我需要返回一个ArrayList a 所以 我尝试将