」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 如何在不複製資料的情況下將迭代器轉換為流?

如何在不複製資料的情況下將迭代器轉換為流?

發佈於2024-11-15
瀏覽:231

How to Convert an Iterator to a Stream Without Copying Data?

將迭代器轉換為流而不進行複製

使用資料結構時,經常需要以不同的方式操作和處理資料。常見的場景是將迭代器(元素的順序集合)轉換為流(一種更通用、更強大的資料處理管道)。

為了有效實現這種轉換,必須避免建立資料副本。這既低效又不必要,尤其是在處理大型資料集時。

一種方法是利用 StreamSupport 類別。它提供了從 Iterable 或 Spliterator 建立流的方法。在這種情況下,我們可以使用 Spliterators.spliteratorUnknownSize() 從 Iterator 建立一個 Spliterator。以下是一個範例:

Iterator sourceIterator = Arrays.asList("A", "B", "C").iterator();
Stream targetStream = StreamSupport.stream(
    Spliterators.spliteratorUnknownSize(sourceIterator, Spliterator.ORDERED),
    false);

另一個選項涉及從 Iterator 建立 Iterable。 Iterable 是一個函數式接口,使用 lambda,我們可以輕鬆地從 Iterator 創建 Iterable:

Iterable iterable = () -> sourceIterator;
Stream targetStream = StreamSupport.stream(iterable.spliterator(), false);

這種方法可以說更具可讀性,因為它利用了函數式介面設計。透過避免不必要的複製,您可以有效地處理數據,同時保持效能和程式碼清晰度。

最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3