【发布时间】:2018-02-09 05:48:08
【问题描述】:
TL;DR; 我正在寻找一个可以查找某个中间或终端操作的地方。我在哪里可以找到这样的文档?
编辑这不是 How to ensure order of processing in java8 streams? 的重复,因为该问题没有提供完整的操作列表。
背景
流是否有遇到顺序取决于源和中间操作
在this excellent stackoverflow answer中重复了
为了确保在整个流操作中保持顺序,您必须研究流的源,所有中间操作和终端操作的文档,以了解它们是否保持顺序(或源是否有顺序)首先)。
这一切都很好,但是我应该查看哪些文档? the package documentation 在一个示例中提到 map 保证排序,但它没有详尽的列表。 javadoc for the Stream class 记录了一些中间操作,但不是全部。
以map为例:
返回一个流,其中包含将给定函数应用于该流的元素的结果。
这是一个中间操作。
返回一个由该流中与给定谓词匹配的元素组成的流。
这是一个中间操作。
这些都没有描述它们是否保持排序。
实际上每个中间操作都默认保留一个顺序。唯一的例外是:
- unordered() 删除排序约束。
- sorted() 改变顺序。
如果没有明确指定,您可以假设操作保持顺序。甚至 distinct() 保持顺序,尽管它增加了并行流的复杂性。
但是有任何官方文档可以支持吗?
额外积分????
实际上有两个单独的排序问题。
- 操作的输出是否与输入保持相同的顺序?
- 操作是否在每个元素上按顺序执行。
例如,并行 map 操作可以按任意顺序遍历所有元素(违反 2.),但仍保持返回流中的顺序(遵守 1.)
【问题讨论】:
标签: java java-8 java-stream