Heim >Java >javaLernprogramm >Wie implementiert man das Java 8-Äquivalent von „takeWhile' von Java 9 für Streams?

Wie implementiert man das Java 8-Äquivalent von „takeWhile' von Java 9 für Streams?

DDD
DDDOriginal
2024-12-19 21:17:10841Durchsuche

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

Java 8 Stream: Begrenzung durch Prädikat

In Szenarien mit potenziell unendlichen Streams müssen wir den Stream oft auf den ersten beschränken Element scheitert an einem bestimmten Prädikat. Java 9 führte die nützliche takeWhile-Operation ein und ermöglichte diese Funktionalität mühelos.

Leider fehlt in Java 8 eine solche Operation. Daher müssen wir alternative Ansätze erkunden, um dieses Verhalten zu erreichen.

TakeWhile in Java 8 implementieren

Um takeWhile in Java 8 zu implementieren, können wir die folgende Strategie nutzen:

  1. Erstellen Sie einen Iterator aus dem Stream mit iterator().
  2. Iterieren Sie den Iterator, bis das Prädikat fehlschlägt.
  3. Sammeln Sie die gefilterten Elemente in einem neuen Stream mit generic().

Unten finden Sie eine Beispielimplementierung:

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);
    }
}

Verwendung von Java 9 takeWhile

Mit Java 9 können Sie die takeWhile-Operation direkt nutzen, wie unten gezeigt:

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

Das obige ist der detaillierte Inhalt vonWie implementiert man das Java 8-Äquivalent von „takeWhile' von Java 9 für Streams?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn