Rumah >Java >javaTutorial >Cuti atau kembali dari Java 8 Stream Foreach?

Cuti atau kembali dari Java 8 Stream Foreach?

Barbara Streisand
Barbara Streisandasal
2025-02-07 12:09:11875semak imbas

Break or return from Java 8 stream forEach?

Java 8 memperkenalkan API Stream, menyediakan cara yang kuat dan ekspresif untuk memproses koleksi data. Walau bagaimanapun, soalan biasa apabila menggunakan aliran adalah: Bagaimana untuk mengganggu atau kembali dari

operasi? forEach

Gelung tradisional membolehkan gangguan awal atau pulangan, tetapi kaedah

Stream tidak menyokong secara langsung kaedah ini. Artikel ini akan menerangkan sebab -sebab dan meneroka kaedah alternatif untuk melaksanakan penamatan pramatang dalam sistem pemprosesan aliran. forEach

Bacaan Lanjut: Penambahbaikan API Java Stream

memahami aliran foreach

Kaedah

adalah operasi terminal yang melakukan satu operasi pada setiap elemen dalam aliran. Ia direka untuk mengendalikan setiap elemen; forEach break return Dalam contoh di atas,

mencetak setiap nama dalam senarai. Tetapi bagaimana jika kita mahu berhenti memproses apabila kita melihat "Bob"?
<code class="language-java">List<string> names = Arrays.asList("Alice", "Bob", "Charlie");
names.stream().forEach(name -> {
    System.out.println(name);
});</string></code>

Mengapa anda tidak boleh menggunakan rehat atau kembali? forEach

tidak menggunakan struktur gelung tradisional, jadi

atau

pernyataan tidak dibenarkan dalam ekspresi lambda di dalamnya. Kenyataan forEach di dalam ungkapan lambda hanya akan keluar dari ungkapan lambda itu sendiri, dan tidak akan keluar dari break atau kaedah tertutupnya. Cuba menggunakan continue atau return akan menghasilkan ralat penyusunan: forEach break continue kaedah alternatif

<code class="language-java">names.stream().forEach(name -> {
    if (name.equals("Bob")) {
        break; // 编译错误
    }
});</code>
1.

Jika gelung diperlukan untuk mengganggu, gelung klasik

adalah pilihan yang berkesan dan sering menjadi pilihan terbaik.

2. Kaedah for

bermaksud bahawa apabila keadaan dipenuhi, pemprosesan aliran akan dilancarkan pendek.
<code class="language-java">for (String name : names) {
    if (name.equals("Bob")) {
        break;
    }
    System.out.println(name);
}</code>

3.

Jika anda menggunakan Java 9 atau lebih baru, anda boleh menggunakan kaedah anyMatch() untuk memproses unsur -unsur sehingga keadaan tertentu dipenuhi.

<code class="language-java">boolean found = names.stream().anyMatch(name -> {
    if (name.equals("Bob")) {
        // 执行操作
        System.out.println("找到Bob");
        return true; // 这将使Stream短路
    }
    System.out.println(name);
    return false;
});</code>

4.

Secara teknikal, anda boleh membuang pengecualian untuk keluar dari kaedah

, tetapi ini tidak disyorkan. takeWhile

<code class="language-java">names.stream()
     .takeWhile(name -> !name.equals("Bob"))
     .forEach(System.out::println);</code>
5

Gunakan Custom

untuk mengawal pemprosesan aliran lebih halus, tetapi dengan kos menambah kerumitan.

Pilih kaedah yang betul

  • kesederhanaan: Jika anda perlu keluar awal, kaedah kitaran tradisional lebih mudah.
  • Gaya fungsi: Jika anda tidak mahu menyimpang dari paradigma pengaturcaraan fungsional, anyMatch, noneMatch, takeWhile (java 9) kaedah mungkin lebih sesuai.
  • Prestasi: Terutama apabila bekerja dengan set data yang besar, kesan prestasi setiap kaedah perlu dipertimbangkan.

Kesimpulan

Kaedah forEach dalam aliran Java 8 tidak membenarkan penggunaan break atau return seperti gelung tradisional, tetapi terdapat beberapa cara untuk memintas batasan ini. Memahami kaedah ini akan membantu anda memilih pilihan terbaik berdasarkan keadaan sebenar.

Atas ialah kandungan terperinci Cuti atau kembali dari Java 8 Stream Foreach?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel sebelumnya:Kelas konkrit di javaArtikel seterusnya:Kelas konkrit di java