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

2022-09-01 12:08:37

如果我在顺序流上调用 collect(例如,通过调用 Collection.stream()),那么它会使用我传递的合并器参数来收集吗?我推测不是,但我在文档中没有看到任何内容。如果我是正确的,那么似乎很不幸地不得不提供我知道不会被使用的东西(如果我知道它是一个顺序流)。


答案 1

请记住,要针对接口规范进行开发,而不是针对实现进行开发。实现可能会随着下一个Java版本而变化,而规范应该保持稳定。

该规范不区分顺序流和并行流。因此,您应该假定可以使用合并器。实际上,有很好的示例表明,顺序流的组合器可以提高性能。例如,下面的 reduce 操作连接字符串列表。在没有组合器的情况下执行代码具有二次复杂性。使用组合器的智能执行可以将运行时间减少一些幅度。

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

答案 2

推荐