Rumah >Java >javaTutorial >Bagaimana untuk Mengehadkan Strim Java 8 Sehingga Predikat Gagal?
Menghadkan Strim Berdasarkan Predikat dalam Java 8
Operasi strim Java 8 menyediakan cara yang berkuasa untuk memanipulasi dan menapis data. Walau bagaimanapun, ia tidak mempunyai operasi khusus untuk mengehadkan aliran yang berkemungkinan tidak terhingga sehingga elemen pertama gagal dalam predikat tertentu.
Dalam Java 9, operasi takeWhile boleh digunakan untuk mencapai gelagat ini. Sebagai contoh, untuk mencetak semua nombor kurang daripada 10 menggunakan takeWhile, anda boleh menulis:
IntStream .iterate(1, n -> n + 1) .takeWhile(n -> n < 10) .forEach(System.out::println);
Tetapi bagaimana pula dengan Java 8, di mana takeWhile tidak tersedia? Dalam kes ini, terdapat beberapa pendekatan untuk melaksanakan fungsi yang serupa.
Salah satu cara melibatkan penggunaan penapis dan operasi findFirst. Coretan kod berikut menunjukkan cara:
IntStream .iterate(1, n -> n + 1) .filter(n -> n < 10) .findFirst() .ifPresent(System.out::println);
Penyelesaian ini berfungsi dengan menapis unsur-unsur yang tidak memenuhi predikat (dalam kes ini, nombor lebih besar daripada atau sama dengan 10) dan kemudian mencari elemen baki pertama dalam aliran itu. Jika tiada unsur sepadan ditemui, findFirst mengembalikan pilihan kosong, yang diabaikan dalam kes ini.
Pendekatan lain menggunakan kaedah Stream.limitUntil tersuai, yang mengambil predikat sebagai hujah. Berikut ialah contoh pelaksanaan:
public static <T> Stream<T> limitUntil(Stream<T> stream, Predicate<? super T> predicate) { AtomicBoolean stop = new AtomicBoolean(false); return stream.takeWhile(t -> { boolean stopFlag = stop.get(); if (!stopFlag) stopFlag = predicate.test(t); stop.set(stopFlag); return !stopFlag; }); }
Kaedah ini boleh digunakan seperti berikut:
IntStream .iterate(1, n -> n + 1) .limitUntil(n -> n >= 10) .forEach(System.out::println);
Atas ialah kandungan terperinci Bagaimana untuk Mengehadkan Strim Java 8 Sehingga Predikat Gagal?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!