首頁 > Java > java教程 > 如何透過索引存取有效地迭代 Java 8 流?

如何透過索引存取有效地迭代 Java 8 流?

Susan Sarandon
發布: 2024-12-18 14:32:17
原創
536 人瀏覽過

How Can I Efficiently Iterate Through a Java 8 Stream with Index Access?

Java 8 中基於索引的簡明流迭代

許多程式設計任務都涉及在存取對應索引時迭代資料結構。 Java 8 流為流處理提供了廣泛的操作,但沒有明確的方法在迭代期間取得索引。

提供的 Java 程式碼示範了使用 IntStream、boxed()、zip( )、filter()、map() 和collect()。雖然它達到了預期的結果,但它的長度和複雜性損害了它的優雅。

最簡潔的方法:

最簡潔的方法是從索引流開始:

String[] names = {"Sam", "Pamela", "Dave", "Pascal", "Erik"};
IntStream.range(0, names.length)
         .filter(i -> names[i].length() <= i)
         .mapToObj(i -> names[i])
         .collect(Collectors.toList());
登入後複製

此方法建構一個從0 到陣列長度的索引流,根據對應的長度過濾索引字串,將索引對應到對應的字串,並將結果收集到清單中。

替代方法:

另一個選項是使用維護一個臨時索引計數器像AtomicInteger 這樣的可變對象:

String[] names = {"Sam", "Pamela", "Dave", "Pascal", "Erik"};
AtomicInteger index = new AtomicInteger();
List<String> list = Arrays.stream(names)
                          .filter(n -> n.length() <= index.incrementAndGet())
                          .collect(Collectors.toList());
登入後複製

此方法保留了基於for 迴圈的索引的熟悉性遞增。但是,應該注意的是,由於並行處理的不確定順序,在並行流上使用此方法可能會導致不正確的行為。

以上是如何透過索引存取有效地迭代 Java 8 流?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板