Java Stream過濾器案例解說 - Foojay

banq發表於2021-08-18

使用 Java 流操作集合中的資料比其他方法更方便、更簡潔。

import java.util.stream.IntStream;

public class LimitStreamChallenger {

    public static void main(String... doYourBest) {
        IntStream.iterate(0, i -> i + 1)
                .limit(5)
                .filter(i -> i % 2 == 0)
                .forEach(System.out::print);

        IntStream.iterate(0, i -> i + 1)
                .peek(System.out::print)
                .filter(i -> i % 2 == 0)
                .limit(3)
                .forEach(System.out::print);
    }

}
列印輸出:
A) 024002244
B) 02400122344
C) 02401234
D) 02401234


分析流程式碼:

IntStream.iterate(0, i -> i + 1).limit(5).filter(i -> i % 2 == 0)                 
.forEach(System.out::print); 

請注意,我們在迭代行使用了無限流,然後我們將流限制為 5 個元素並按偶數過濾它,最後列印所有元素。由於我們將數字限制為 5,因此我們將讓流在 0 到 4 的範圍內迭代。然後我們用偶數過濾它,最後列印元素,第一個結果將是 024。
 
在第二個流中,我們使用與第一個流非常相似的結構,但不同之處在於“peek”方法以及 filter 和 limit 方法的順序。peek 方法將列印此流條件下的所有元素。請記住,peek 方法旨在除錯並幫助我們瞭解 Steam 中發生的事情。然後我們將流元素過濾為偶數,我們將在這裡有 0、2 和 4,因為我們受到 3 的限制。
請注意,在此流中,我們確實有 3 個元素,這是因為限制是在 filter 方法之上執行的。
由於 peek 方法將列印所有元素,過濾的和未過濾的,最終輸出將是......你怎麼看?

 

相關文章