Rumah > Java > javaTutorial > Bagaimana untuk Melaksanakan Setara Java 8 dengan `takeWhile` Java 9 untuk Strim?

Bagaimana untuk Melaksanakan Setara Java 8 dengan `takeWhile` Java 9 untuk Strim?

DDD
Lepaskan: 2024-12-19 21:17:10
asal
803 orang telah melayarinya

How to Implement Java 8's Equivalent of Java 9's `takeWhile` for Streams?

Strim Java 8: Mengehadkan Mengikut Predikat

Dalam senario dengan aliran yang berpotensi tidak terhingga, kita sering menghadapi keperluan untuk mengehadkan strim sehingga yang pertama elemen gagal predikat tertentu. Java 9 memperkenalkan operasi takeWhile yang berguna, membolehkan fungsi ini dengan mudah.

Malangnya, Java 8 tidak mempunyai operasi sedemikian. Oleh itu, kita mesti meneroka pendekatan alternatif untuk mencapai tingkah laku ini.

Melaksanakan takeWhile in Java 8

Untuk melaksanakan takeWhile dalam Java 8, kita boleh memanfaatkan strategi berikut:

  1. Buat iterator daripada strim menggunakan iterator().
  2. Lelaran melalui iterator sehingga predikat gagal.
  3. Kumpulkan elemen yang ditapis ke dalam aliran baharu menggunakan generate().

Di bawah ialah contoh pelaksanaan:

import java.util.Iterator;
import java.util.stream.Stream;

public class StreamTakeWhile {

    public static <T> Stream<T> takeWhile(Stream<T> stream, java.util.function.Predicate<T> predicate) {
        Iterator<T> iterator = stream.iterator();
        return Stream.generate(() -> {
            if (iterator.hasNext() && predicate.test(iterator.next())) {
                return iterator.next();
            }
            return null;
        });
    }

    public static void main(String[] args) {
        StreamTakeWhile.takeWhile(Stream.iterate(1, n -> n + 1), n -> n < 10)
                .forEach(System.out::println);
    }
}
Salin selepas log masuk

Menggunakan Java 9 takeWhile

Dengan Java 9, anda boleh terus menggunakan operasi takeWhile seperti yang ditunjukkan di bawah:

IntStream
    .iterate(1, n -> n + 1)
    .takeWhile(n -> n < 10)
    .forEach(System.out::println);
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimana untuk Melaksanakan Setara Java 8 dengan `takeWhile` Java 9 untuk Strim?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan