因此,我一直在玩並行運行流,並根據API文檔和我已閱讀的其他支持材料監視其行爲。無序和並行時的Java流限制和跳過行爲
我創建了兩個並行流並運行distinct()
,其中一個流是有序的,另一個是無序的流。然後我使用forEachOrdered()
打印結果(爲了確保我看到在不同運行後得到的流的碰撞順序),並且可以清楚地看到無序版本不保持原始排序,但是對於大數據集,顯然會增強並行性能。
有API的筆記表明limit()
和skip()
操作也應並行更有效地運行時,流無序的,而不是來取得前n
元素,你可以得到任何n
元素。我試圖用與上面相同的方式來模擬這個,但是與有序流和無序流並行運行的結果總是相同的。換句話說,當我在運行限制後打印出結果時,即使對於無序(並行)流,它仍然始終選擇前n個元素?
任何人都可以解釋這一點嗎?我嘗試改變我的輸入數據集的大小和n的值,並沒有什麼區別。我會認爲它會抓住任何n個元素並針對並行性能進行優化?有沒有人在實踐中看到過這種情況,並且可能會提供一種能夠持續顯示此行爲的解決方案?