java - Java 8 中的顺序流在调用 collect 时是否使用组合器参数?

标签 java java-8 java-stream

如果我在顺序流上调用 collect(例如,通过调用 Collection.stream()),那么它会使用我传递给 collect 的组合器参数吗?我想不是,但我在文档中什么也没看到。如果我是正确的,那么必须提供一些我知道不会被使用的东西(如果我知道它是一个顺序流)似乎很不幸。

最佳答案

记住要根据接口(interface)规范进行开发,而不是根据实现进行开发。下一个 Java 版本的实现可能会发生变化,而规范应该保持稳定。

规范不区分顺序流和并行流。因此,您应该假设可能会使用 combiner。实际上,有很好的例子表明用于顺序流的 combiners 可以提高性能。例如,以下 reduce 操作连接字符串列表。在没有 combiner 的情况下执行代码具有二次复杂度。使用 combiner 的智能执行可以大大减少运行时间。

List<String> tokens = ...;
String result = tokens.stream().reduce("", String::concat, String::concat);

关于java - Java 8 中的顺序流在调用 collect 时是否使用组合器参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24202473/

相关文章:

java - 无法将数据作为列表从 spring Controller 传递到 View ?

java - 需要使用 lambda 映射多个文件中的归约行

java - 在转换为 BigDecimal 之前先转换为 String

java - 搜索重复项时如何删除流中的首次出现?

java - 在 Java 中检查属性是否为空的最简单方法

java - Elasticsearch java.lang.NoClassDefFoundError:org/elasticsearch/transport/Netty3Plugin

Java 数据库最终用户

java - 从我的 Java 工具启动执行 .exe

java - 流供应商收到错误 'stream has already been operated upon or closed'

Java 对 anyMatch 使用多个谓词