Apabila bekerja dengan struktur data, keperluan sering timbul untuk memanipulasi dan memproses data dengan cara yang berbeza. Satu senario biasa ialah penukaran Iterator, koleksi unsur berurutan, kepada Strim, saluran pemprosesan data yang lebih serba boleh dan berkuasa.
Untuk mencapai penukaran ini dengan berkesan, adalah penting untuk mengelak daripada membuat salinan data . Ini adalah tidak cekap dan tidak perlu, terutamanya apabila berurusan dengan set data yang besar.
Satu pendekatan ialah menggunakan kelas StreamSupport. Ia menyediakan kaedah untuk mencipta aliran daripada Iterable atau Spliterator. Dalam kes ini, kita boleh mencipta Spliterator daripada Iterator menggunakan Spliterators.spliteratorUnknownSize(). Berikut ialah contoh:
<code class="java">Iterator<String> sourceIterator = Arrays.asList("A", "B", "C").iterator(); Stream<String> targetStream = StreamSupport.stream( Spliterators.spliteratorUnknownSize(sourceIterator, Spliterator.ORDERED), false);</code>
Pilihan lain melibatkan mencipta Iterable daripada Iterator. Iterable ialah antara muka berfungsi, dan dengan lambdas, kita boleh mencipta Iterable daripada Iterator dengan mudah:
<code class="java">Iterable<String> iterable = () -> sourceIterator; Stream<String> targetStream = StreamSupport.stream(iterable.spliterator(), false);</code>
Pendekatan ini boleh dikatakan lebih mudah dibaca, kerana ia menggunakan reka bentuk antara muka berfungsi. Dengan mengelakkan penyalinan yang tidak perlu, anda boleh memproses data anda dengan cekap sambil mengekalkan prestasi dan kejelasan kod.
Atas ialah kandungan terperinci Bagaimana untuk Menukar Iterator kepada Strim Tanpa Menyalin Data?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!