TL; DR;我正在寻找一个地方,我可以查找某个中间或终端操作。我在哪里可以找到这样的文档?Java Streams:哪些操作保存顺序
背景
无论是否流具有一遇到顺序取决于源和中间操作上
其在this excellent stackoverflow answer
重复为了确保在整个流操作中维护排序,您必须研究流源的文档,所有中间操作和终端操作,以确定它们是否维持顺序(或者源代码是否首先排序)。
这一切都很好,但我应该看看哪些文档? the package documentation在一个示例中提到map
保证排序,但它没有详尽的列表。 javadoc for the Stream class记录了一些中间操作,但不是全部。 就拿map
:
返回由施加给定函数此流中的元素的结果的流。
这是一个中间操作。
返回由该流匹配给定的谓词的元素流。
这是一个中间操作。
没有一个描述它们是否保持排序。
This stackoverflow answer权利要求:
实际上每个中间操作保留默认顺序。唯一的例外是:
- unordered()它删除排序约束。
- sorted()它改变了顺序。
如果未明确指定,则可以假定操作保持顺序。即使distinct()也保持顺序,尽管它为并行流增加了很多复杂性。
但是是否有任何官方文件支持?
额外信贷
实际上有两个单独的订购问题。
- 操作的输出是否保持与输入相同的顺序?
- 操作是否按顺序在每个元素上执行。
例如,并行map
操作上可以继续以任意顺序的所有元素(违反2),但仍维持返回流中的顺序(1服从)
另请参见https://stackoverflow.com/a/29218074/32453 – rogerdpack