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中文網其他相關文章!