Ketika saya menelepon, Stream.sort(..)
adakah array elemen baru yang dibuat dan alirannya berputar di atas array yang diurutkan yang baru dibuat?
Dengan kata lain, bagaimana Java 8 Stream berfungsi di sort
bawah tenda?
java
java8
stream-processing
InformedA
sumber
sumber
Jawaban:
Anda dapat menggunakan grepcode.com untuk mencari melalui kode perpustakaan standar Java (dan beberapa perpustakaan lainnya). Sayangnya, kode implementasi aliran agak abstrak. Titik awal yang baik adalah
java.util.stream.SortedOps
kelas internal yang mengubah aliran menjadi aliran yang diurutkan.The saat pelaksanaan (digunakan untuk aliran wadah perpustakaan standar) membuat no-op jika sungai sudah diurutkan, menggunakan sebuah array jika ukuran sungai diketahui (
SizedRefSortingSink
), atau terakumulasi semua elemen dalam sebuah ArrayList jika ukurannya tidak diketahui (RefSortingSink
).Tentu saja, detail implementasi seperti itu dapat berubah dengan rilis apa pun, tetapi pertimbangan mendasarnya bersifat universal: Menyortir aliran tentu saja merupakan operasi yang bersemangat / memblokir, dan menyortir aliran tak terbatas tidak bermakna. Ini berarti menyortir aliran tidak berguna jika Anda menggunakan aliran karena mereka bisa malas, tetapi Anda masih mendapatkan sintaksis aliran yang nyaman.
Streaming lain harus menyediakan implementasi mereka sendiri
Stream.sorted()
, yang kemungkinan akan serupa.sumber