Collectors.toList() 返回什么样的 List

2024-06-25

我在读Lambda 的现状:图书馆版 http://cr.openjdk.java.net/~briangoetz/lambda/lambda-libraries-final.html,并且我对一项声明感到惊讶:

在该部分下Streams,有如下:

List<Shape> blue = shapes.stream()
                         .filter(s -> s.getColor() == BLUE)
                         .collect(Collectors.toList());

该文件没有说明什么shapes事实上是这样,我不知道这是否重要。

让我困惑的是:什么样的混凝土List这段代码有返回吗?

  • 它将变量分配给List<Shape>,这完全没问题。
  • stream() nor filter()决定使用哪种列表。
  • Collectors.toList()都没有指定具体类型List.

所以呢concrete的类型(子类)List在这里被使用吗?有任何保证吗?


那么,这里使用的 List 的具体类型(子类)是什么?有任何保证吗?

如果你看一下文档Collectors#toList() https://docs.oracle.com/en/java/javase/14/docs/api/java.base/java/util/stream/Collectors.html#toList(),它指出 -“不保证返回列表的类型、可变性、可序列化性或线程安全性”。如果您想要返回特定的实现,您可以使用Collectors#toCollection(Supplier) https://docs.oracle.com/en/java/javase/14/docs/api/java.base/java/util/stream/Collectors.html#toCollection(java.util.function.Supplier)反而。

Supplier<List<Shape>> supplier = () -> new LinkedList<Shape>();

List<Shape> blue = shapes.stream()
            .filter(s -> s.getColor() == BLUE)
            .collect(Collectors.toCollection(supplier));

从 lambda 中,您可以返回任何您想要的实现List<Shape>.

Update:

或者,您甚至可以使用方法参考:

List<Shape> blue = shapes.stream()
            .filter(s -> s.getColor() == BLUE)
            .collect(Collectors.toCollection(LinkedList::new));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Collectors.toList() 返回什么样的 List? 的相关文章

随机推荐

  • Firefox 和 IE:从缓存检索数据时损坏数据

    我向服务器发出一个请求 如下所示 http localhost Combine aspx flag file1 js file2 js file3 js 我也尝试过这个 http localhost Combine aspx flag va
  • Microsoft Graph API:取消重复事件

    我目前尝试使用 Microsoft Graph API 通过以下调用取消一组定期会议 POST users prinicipalName calendar events id cancel 我收到了不支持的段类型错误 我可以一次删除一个事件
  • 使用 jQuery 异步加载图像

    我想使用 jQuery 在我的页面上异步加载外部图像我尝试过以下方法 ajax url http somedomain com image jpg timeout 5000 success function error function r
  • 为什么 writedump 函数不需要在 cfscript 中使用分号?

    通常 CFSCRIPT 标记中编写的所有语句都必须以半色 结尾 但今天我正在处理示例代码 我忘记在 writedump 函数之后编写分号 但代码仍然执行良好 下面是示例代码 这可以很好地工作 在声明的末尾 只是好奇为什么 writeDump
  • 使用 OpenSSL 从证书签名请求中提取请求的有效期

    我们使用由 OpenSSL 提供支持的私有证书颁发机构来对我们的客户进行身份验证 我们提供了一个简单的基于 Web 的实用程序 允许他们上传 CSR 文件以供证书颁发机构签名 目前 我们只能颁发固定期限的证书 目前为 365 天 然而 我们
  • SSDT 单元测试:从配置文件读取 SQL Server 单元测试设置时发生错误

    我在 Visual Studio 2013 professional 中创建了一个数据库项目 然后通过右键单击存储过程之一并选择来添加单元测试创建单元测试 选择创建一个新的VB测试项目 然后右键单击新创建的测试项目并选择SQL Server
  • 在本地环境中禁用jms监听器

    如何在本地环境中禁用 jms 侦听器 由于我没有从本地环境连接到 MQ 因此我不希望我的控制台日志因尝试连接 MQ 消息而被淹没 所以我想在本地禁用它 我正在使用 Spring boot 和基于注释的编程 我在这里看到帖子建议将属性中的 a
  • 如何在TWebBrowser中显示相对路径图像?

    我正在 DesignMode Doc DesignMode On 中使用 TWebBrowser 来编写 HTML 文档 TWebBrowser 中没有加载文档 磁盘上的 HTML 文件 我直接在 TWebBrowser 中从零开始创建文档
  • 在 Python 3 的 Pytz 模块中将 EST、CST 和 DST 时区转换为 unix 时间戳

    我有一个采用以下格式的日期 2019 12 13 20 18 EST or 2019 12 13 20 18 DSTor 2019 12 13 20 18 CST 我想将它们转换为unix timestamp 我在用Pytz module
  • 检测霍夫圆android

    我正在尝试使用 android 检测圆圈 我成功实现了检测线算法 但在尝试绘制霍夫圆算法时没有显示任何内容 这是我的代码 Mat thresholdImage new Mat getFrameHeight getFrameHeight 2
  • 在单独的线程中从服务获取 AutoCompleteTextView 建议

    For my AutoCompleteTextView我需要从网络服务获取数据 由于这可能需要一点时间 我不希望 UI 线程没有响应 因此我需要以某种方式在单独的线程中获取数据 例如 从 SQLite DB 获取数据时 使用以下命令非常容易
  • 为什么 CSS 重置不使用“*”来覆盖所有元素?

    For example the Meyer reset http meyerweb com eric tools css reset has a long list of elements1 which I believe can be r
  • 查找导致 Chrome SameSite 警告的 cookie

    正如你们中的一些人所知 Chrome 将于本月开始使用新的 SameSite cookie 政策 https web dev samesite cookies explained https web dev samesite cookies
  • Polymer - 如何将观察者附加到数组?

    如何将观察者附加到作为数组的聚合物属性 需要明确的是 我希望在数组中的项目发生变化时进行回调 为了简单起见 假设我的数组是 text foo text bar 我想要这样的东西 observe items text itemsChanged
  • Yarn:无法验证第一个证书

    我正在尝试从 npm 迁移到 Yarn 当我尝试通过纱线安装依赖项时 出现此错误 unable to verify the first certificate at Error native at TLSSocket
  • Python 多处理map_async

    我想跳过从以下位置返回的结果map async http docs python org 2 library multiprocessing html multiprocessing pool multiprocessing Pool ma
  • 振动使加速度计给出错误的值

    我有一个简单的应用程序 可以读取加速度遥控值 对于 x y 和 z 轴 但为了达到一定的价值 我以编程方式振动我的手机 因此 每当发生振动时 加速度计值就会在范围内大幅上下闪烁 我想避免这种情况 请告诉我如何防止加速度计在振动模式下给出不同
  • 如何从 tcl 脚本调用 bash 命令?

    Bash 命令可从交互式 tclsh 会话中获得 例如 在 tclsh 会话中 您可以 ls 代替 exec ls 但是 您不能有一个直接调用 bash 命令的 tcl 脚本 或者没有exec 如何使 tclsh 在解释 tcl 脚本文件时
  • VS 2017安装后无法运行基于project.json的.Net Core

    我已经在一个软件上工作了一段时间并且总是使用它来执行它点网运行 今天 我决定安装 VS 2017 之后 但仍不完全确定这是否是根本原因 我无法再运行我的软件 预先存在的项目与我使用 VS 2017 打开的项目相距甚远 因此我怀疑唯一的冲突可
  • Collectors.toList() 返回什么样的 List

    我在读Lambda 的现状 图书馆版 http cr openjdk java net briangoetz lambda lambda libraries final html 并且我对一项声明感到惊讶 在该部分下Streams 有如下