Spliterator: Pemisahan untuk Keselarian
Laksanakan Spliterator tersuai untuk mendedahkan data domain sebagai sumber strim yang boleh dipecahkan.
Spliterator: Pemisahan untuk Keselarian ialah pelajaran Java Academy percuma di CoddyKit. Ini ialah pelajaran 3 daripada 4. Anda boleh membaca keseluruhan pelajaran di bawah secara percuma — kemudian berlatih secara praktikal dalam pelayar menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Java Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Java Academy merangkumi sejumlah 4 pelajaran.
Apakah Itu Spliterator?
Spliterator (Iterator yang boleh dipecahkan) ialah mekanisme teras di sebalik strim. Ia mengulangi elemen dan boleh memecahkan dirinya kepada dua bahagian untuk pemprosesan selari.
Kaedah Utama Spliterator
Empat kaedah teras: tryAdvance (memproses satu elemen), forEachRemaining (memproses semua elemen yang berbaki), trySplit (memecahkan kepada dua bahagian), estimateSize (anggaran bilangan elemen).
Spliterator<Integer> sp = List.of(1,2,3,4,5,6).spliterator();
Spliterator<Integer> half = sp.trySplit(); // splits off first ~half
half.forEachRemaining(System.out::println); // 1 2 3
sp.forEachRemaining(System.out::println); // 4 5 6Ciri-ciri Spliterator
Spliterator mengisytiharkan cirinya dengan bendera bit: SIZED, ORDERED, DISTINCT, SORTED, NONNULL, IMMUTABLE, CONCURRENT, SUBSIZED.
Spliterator<String> sp = List.of("a","b","c").spliterator();
System.out.println(Integer.toBinaryString(sp.characteristics()));
// Characteristics include ORDERED, SIZED, SUBSIZEDCara trySplit Berfungsi
trySplit() mengembalikan Spliterator baharu yang meliputi kira-kira separuh daripada elemen yang masih berbaki. Spliterator asal meliputi separuh yang lain. Kembalikan null jika pemecahan tidak boleh dilakukan.
// ArrayList Spliterator splits efficiently at midpoint:
// [0,1,2,3,4,5] -> [0,1,2] (new) + [3,4,5] (original)Membina Spliterator Tersuai
Laksanakan Spliterator<T> untuk mendedahkan struktur data tersuai sebagai sumber strim. Takrifkan trySplit untuk mendayakan pemprosesan selari.
public class RangeSpliterator implements Spliterator<Integer> {
private int start, end;
public RangeSpliterator(int start, int end) { this.start=start; this.end=end; }
public boolean tryAdvance(Consumer<? super Integer> action) {
if (start >= end) return false;
action.accept(start++); return true;
}
public Spliterator<Integer> trySplit() {
int mid = (start + end) / 2;
if (mid <= start) return null;
RangeSpliterator prefix = new RangeSpliterator(start, mid);
this.start = mid; return prefix;
}
public long estimateSize() { return end - start; }
public int characteristics() { return ORDERED | SIZED | SUBSIZED | IMMUTABLE; }
}Mencipta Strim daripada Spliterator
Gunakan StreamSupport.stream(spliterator, parallel) untuk mencipta strim daripada mana-mana spliterator — jambatan antara sumber data tersuai dengan API Stream.
Spliterator<Integer> sp = new RangeSpliterator(0, 1_000_000);
Stream<Integer> stream = StreamSupport.stream(sp, true); // true = parallel
long count = stream.filter(n -> n % 2 == 0).count();
System.out.println(count); // 500000Spliterator untuk Pepohon Binari
Spliterator tersuai membolehkan pemprosesan selari pada struktur bukan senarai seperti pepohon. trySplit mengembalikan Spliterator subpepohon kiri dan mengekalkan subpepohon kanan.
Kecekapan Selari dan Kualiti Pemecahan
Strim selari memecahkan data secara berulang sehingga bahagian-bahagiannya cukup kecil untuk satu utas. Pemecahan yang baik memerlukan estimateSize yang tepat dan bahagian yang kira-kira sama besar.
forEachRemaining untuk Pemprosesan Pukal
Jika pemecahan tidak diperlukan, gantikan forEachRemaining untuk pemprosesan pukal yang mengelakkan overhed bagi setiap elemen daripada tryAdvance dalam gelung.
@Override
public void forEachRemaining(Consumer<? super Integer> action) {
for (int i = start; i < end; i++) action.accept(i);
start = end; // mark as exhausted
}Spliterator Berbanding Lelaran
Iterator: berjujukan sahaja, tiada petunjuk saiz dan tiada pemecahan. Spliterator: menyokong pemprosesan selari, menyediakan ciri dan anggaran saiz, serta direka untuk API Stream.
Semakan Pantas
Apakah yang dikembalikan oleh trySplit() apabila pemecahan tidak boleh dilakukan?
Imbas Kembali
Spliterator ialah enjin bagi strim selari. Laksanakan tryAdvance, trySplit, estimateSize dan characteristics untuk mendedahkan struktur data tersuai sebagai strim. Gunakan StreamSupport.stream(sp, true) untuk menjalankannya secara selari.
Pelajari Java dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 104
- Pelajaran
- 374
Soalan Lazim
Adakah pelajaran “Spliterator: Pemisahan untuk Keselarian” percuma?
Ya — teks penuh “Spliterator: Pemisahan untuk Keselarian” boleh dibaca secara percuma di web ini. Untuk berlatih secara interaktif menggunakan penyunting kod terbina dalam dan tutor kecerdasan buatan 24/7, serta membuka kunci baki kursus Java Academy, tingkat taraf kepada CoddyKit PRO. Kursus Java Academy merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Spliterator: Pemisahan untuk Keselarian”?
Laksanakan Spliterator tersuai untuk mendedahkan data domain sebagai sumber strim yang boleh dipecahkan. Anda berlatih Java Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Java Academy?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Java Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 3 daripada 4.
Berapa lamakah pelajaran “Spliterator: Pemisahan untuk Keselarian” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Java Academy ini?
Ya. Setiap pelajaran Java Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- flatMap untuk Koleksi Bersarang
- Strim Selari: Prestasi dan Perangkap
- Spliterator: Pemisahan untuk Keselarian
- Strim Tanpa Had dengan iterate dan generate