首頁 >Java >java教程 >如何為流實作 Java 8 與 Java 9 的「takeWhile」等效的功能?

如何為流實作 Java 8 與 Java 9 的「takeWhile」等效的功能?

DDD
DDD原創
2024-12-19 21:17:10804瀏覽

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

Java 8 Stream:透過謂詞限制

在潛在無限流的場景中,我們經常遇到需要限制流直到第一個流的情況。元素未通過特定謂詞。 Java 9 引入了有用的 takeWhile 操作,可以毫不費力地啟用此功能。

不幸的是,Java 8 缺少這樣的操作。因此,我們必須探索替代方法來實現此行為。

在 Java 8 中實作 takeWhile

要在 Java 8 中實作 takeWhile,我們可以利用以下策略:

  1. 使用下列指令從流建立迭代器iterator().
  2. 迭代迭代器,直到謂詞失敗。
  3. 使用generate()將過濾後的元素收集到新流中。

以下是範例實作:

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

使用Java 9 takeWhile

使用Java 9,您可以直接使用takeWhile 操作,take如下圖所示:

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

以上是如何為流實作 Java 8 與 Java 9 的「takeWhile」等效的功能?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn