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