


Mengapakah `filter()` Java Stream Selepas `flatMap()` Kadangkala Hilang Kemalasan?
Penapis Java Stream Selepas FlatMap Tidak Sepenuhnya Malas
Strim Java menyediakan cara untuk memproses saluran paip data melalui urutan transformasi. Operasi perantaraan biasanya malas, bermakna ia tidak dilaksanakan sehingga operasi terminal dipanggil. Walau bagaimanapun, telah diperhatikan bahawa penggunaan filter() selepas flatMap() dalam senario tertentu boleh membawa kepada tingkah laku tidak malas.
Kod Contoh
Pertimbangkan perkara berikut kod:
System.out.println( "Result: " + Stream.of(1, 2, 3) .filter(i -> { System.out.println(i); return true; }) .findFirst() .get() ); System.out.println("-----------"); System.out.println( "Result: " + Stream.of(1, 2, 3) .flatMap(i -> Stream.of(i - 1, i, i + 1)) .flatMap(i -> Stream.of(i - 1, i, i + 1)) .filter(i -> { System.out.println(i); return true; }) .findFirst() .get() );
Output
1 Result: 1 ----------- -1 0 1 0 1 2 1 2 3 Result: -1
Penjelasan
Dalam kes pertama, operasi penapisan digunakan sebelum flatMap(), mengakibatkan penilaian malas. Penilaian berhenti pada elemen padanan pertama (1).
Dalam kes kedua, operasi flatMap() mencipta aliran baharu sembilan elemen (-1, 0, 1, 0, 1, 2, 1 , 2, 3). Operasi penapis() seterusnya digunakan pada setiap elemen ini, menyebabkan tingkah laku tidak malas. Walaupun menemui elemen padanan (-1), penilaian terus memproses semua elemen dalam strim.
Betulkan
Isu ini telah ditangani dalam JDK-8075939 dan ditetapkan dalam Java 10. Ia telah dibackport ke Java 8 in JDK-8225328.
Pembetulan memastikan penilaian malas dikekalkan dengan kehadiran kedua-dua operasi flatMap() dan penapis(). Ini bermakna penilaian kini akan ditamatkan sebaik sahaja elemen padanan ditemui.
Implikasi
Pembetulan ini menyelesaikan isu yang boleh timbul daripada tingkah laku tidak malas apabila menggunakan flatMap() dan filter(). Ia meningkatkan prestasi dan ketepatan saluran paip aliran dalam kes di mana penamatan awal dijangkakan.
Atas ialah kandungan terperinci Mengapakah `filter()` Java Stream Selepas `flatMap()` Kadangkala Hilang Kemalasan?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas











Penyelesaian masalah dan penyelesaian kepada perisian keselamatan syarikat yang menyebabkan beberapa aplikasi tidak berfungsi dengan baik. Banyak syarikat akan menggunakan perisian keselamatan untuk memastikan keselamatan rangkaian dalaman. …

Penyelesaian untuk menukar nama kepada nombor untuk melaksanakan penyortiran dalam banyak senario aplikasi, pengguna mungkin perlu menyusun kumpulan, terutama dalam satu ...

Pemprosesan pemetaan medan dalam dok sistem sering menemui masalah yang sukar ketika melaksanakan sistem dok: bagaimana untuk memetakan medan antara muka sistem dengan berkesan ...

Apabila menggunakan Mybatis-Plus atau Rangka Kerja ORM yang lain untuk operasi pangkalan data, sering diperlukan untuk membina syarat pertanyaan berdasarkan nama atribut kelas entiti. Sekiranya anda secara manual setiap kali ...

Mula musim bunga menggunakan versi IntelliJideaultimate ...

Penukaran objek dan tatasusunan Java: Perbincangan mendalam tentang risiko dan kaedah penukaran jenis cast yang betul Banyak pemula Java akan menemui penukaran objek ke dalam array ...

Penjelasan terperinci mengenai reka bentuk jadual SKU dan SPU di platform e-dagang Artikel ini akan membincangkan isu reka bentuk pangkalan data SKU dan SPU dalam platform e-dagang, terutamanya bagaimana menangani jualan yang ditentukan pengguna ...

Bagaimanakah penyelesaian caching Redis menyedari keperluan senarai kedudukan produk? Semasa proses pembangunan, kita sering perlu menangani keperluan kedudukan, seperti memaparkan ...
