Khi tôi gọi Stream.sort(..)
là có một mảng các phần tử mới được tạo và luồng lặp lại trên mảng được sắp xếp mới được tạo?
Nói cách khác, Java 8 Stream hoạt động như thế nào sort
dưới mui xe?
Khi tôi gọi Stream.sort(..)
là có một mảng các phần tử mới được tạo và luồng lặp lại trên mảng được sắp xếp mới được tạo?
Nói cách khác, Java 8 Stream hoạt động như thế nào sort
dưới mui xe?
Câu trả lời:
Bạn có thể sử dụng grepcode.com để tìm kiếm thông qua mã thư viện chuẩn Java (và một số thư viện khác). Thật không may, mã thực hiện luồng khá trừu tượng. Một điểm khởi đầu tốt là java.util.stream.SortedOps
lớp bên trong biến đổi một luồng thành một luồng được sắp xếp.
Việc triển khai hiện tại (được sử dụng cho các luồng của bộ chứa thư viện tiêu chuẩn) làm cho nó trở thành không có op nếu luồng đã được sắp xếp, sử dụng một mảng nếu kích thước của luồng được biết ( SizedRefSortingSink
) hoặc tích lũy tất cả các phần tử trong ArrayList nếu kích thước là chưa biết ( RefSortingSink
).
Tất nhiên, các chi tiết triển khai như vậy có thể thay đổi với bất kỳ bản phát hành nào, nhưng các cân nhắc cơ bản là phổ biến: Sắp xếp một luồng nhất thiết phải là một hoạt động háo hức / chặn và sắp xếp một luồng vô hạn là không có ý nghĩa. Điều này có nghĩa là sắp xếp một luồng không hữu ích nếu bạn sử dụng các luồng vì chúng có thể lười biếng, nhưng bạn vẫn nhận được cú pháp luồng thuận tiện.
Các luồng khác sẽ phải cung cấp việc thực hiện riêng của chúng Stream.sorted()
, có thể sẽ tương tự.