我正在實施Spliterator
明確限制並行化的trySplit()
返回null
。執行estimateSize()
是否會爲此分割器生成的流提供任何性能改進?或者估計的大小隻對並行化有用?估計連續Spliterator上的大小()
編輯:爲了澄清,我具體詢問估計大小。換句話說,我的分割器沒有SIZED
特性。
我正在實施Spliterator
明確限制並行化的trySplit()
返回null
。執行estimateSize()
是否會爲此分割器生成的流提供任何性能改進?或者估計的大小隻對並行化有用?估計連續Spliterator上的大小()
編輯:爲了澄清,我具體詢問估計大小。換句話說,我的分割器沒有SIZED
特性。
查看調用層次結構相關spliterator特徵表明,它至少相關stream.toArray()
性能
此外,還有內部流實現等效的標誌,似乎是用來排序:
所以除了並行流操作外,大小估計似乎被用於這兩種操作。
我沒有爲我的搜索要求詳盡,所以只要拿這些作爲例子。
不施膠特點我只能找到estimateSize()
是相關的流管道並行執行調用。
當然,這可能會在將來或另一個Stream實現中發生變化,而不是標準JDK的行爲可能會有所不同。
甲spliterator可以遍歷元素:
1.Individually(tryAdvance())
2.Sequentially散裝(forEachRemaining())
作爲每java docsestimateSize()
分裂期間來得心應手。
通過estimateSize()方法,Spliterators可以提供估計剩餘的 元素的數量。理想情況下,如 特性SIZED所示,該值完全對應於將在成功遍歷中遇到的 元素的數量。 然而,即使當未完全知道時,估計值值仍然可以是對在源上執行的操作有用的,例如幫助確定是進一步分割還是沿着順序遍歷 其餘元素。
因爲你spliterator沒有施膠特徵estimateSize
將不提供任何性能(因爲沒有並行的),但是請記住,estimateSize
Java的文檔沒有提到並行的東西,所有它指出是:
返回:估計大小,或Long.MAX_VALUE(如果無限,未知, 或計算太昂貴)。
粗體部分給出的唯一例子是確定是否可以進一步分割。分裂只用於並行流,OP會明確拒絕,因此是問題。 –
至少toArray方法將使用估計的大小;合理準確的估計可能會減少複製。 –