Java8 unordered()無序化無效, 多次運行結果還是與流中元素順序一致// 多次運行結果: 5, 1, 2, 6, 3, 7, 4 沒有達到無序的效果Stream.of(5, 1, 2, 6, 3, 7, 4).unordered().forEach(System.out::println);求大神指教相關代碼
/**
* S unordered(); 產生一個與當前流中元素相同的無序流, 當流本身就是無序或流已經無序, 會返回流本身
*/
@Test
public void unorderedTest() {
Stream.of(5, 1, 2, 6, 3, 7, 4).forEach(System.out::println);
// 多次運行結果: 5, 1, 2, 6, 3, 7, 4 沒有達到無序的效果 TODO
Stream.of(5, 1, 2, 6, 3, 7, 4).unordered().forEach(System.out::println);
}
1 回答

互換的青春
TA貢獻1797條經驗 獲得超6個贊
unordered()
操作不會執行任何操作來顯式地對流進行排序。它的作用是消除了流必須保持有序的約束,從而允許后續操作使用不必考慮排序的優化。
您可以在Java 8文檔中閱讀此內容:
對于順序流,順序的存在與否不會影響性能,只影響確定性。如果流是順序的,則在相同的源上重復執行相同的流管道將產生相同的結果;
如果是非順序流,重復執行可能會產生不同的結果。 對于并行流,放寬排序約束有時可以實現更高效的執行。 ...在流有序時, 但用戶不特別關心該順序的情況下,使用 unordered 明確地對流進行去除有序約束可以改善某些有狀態或終端操作的并行性能。
可以比較下面的結果
Stream.of(5, 1, 2, 6, 3, 7, 4).unordered().forEach(System.out::println); Stream.of(5, 1, 2, 6, 3, 7, 4).unordered().parallel().forEach(System.out::println);
添加回答
舉報
0/150
提交
取消