Java 8 Stream Api 中的 skip 和 limit 操作


1. 前言

Java 8 Stream API 中的skip()limit()方法具有類似的作用。它們都是對流進行裁剪的中間方法。今天我們來探討一下這兩個方法。

2. skip()

skip(lang n) 是一個跳過前 n 個元素的中間流操作。我們編寫一個簡單的方法來進行skip操作,將流剩下的元素打印出來。

  public static void skip(long n) {
        Stream<Integer> integerStream = Stream.of(1, 2, 3, 4, 5, 6);
        integerStream.skip(n).forEach(integer -> System.out.println("integer = "   integer));
    }

經過測試,當 n < 0 時直接拋出了 IllegalArgumentException 異常。畢竟要跳過一些元素,跟下象棋一個道理不能后退只能向前。當 n=0 時,原封不動完璧歸趙。這種操作一般我們不會主動搞,沒有意義。當 n=4 時,打印了 56 ,由此可推斷當我們取值大於等於流的大小時肯定什么也沒有了,對於流來說肯定是個空流。經過檢驗確實count=0

也就是說 skip(long n) 方法跳過前 n (非負)個元素,返回剩下的流,有可能為空流。

3. limit()

limit(long maxsize) 我們也如法炮制:

    public static void limit(long maxsize) {
        Stream<Integer> integerStream = Stream.of(1, 2, 3, 4, 5, 6);
         integerStream.limit( maxsize).forEach(integer -> System.out.println("integer = "   integer));
    }

n < 0 時直接拋出了 IllegalArgumentException 異常。當 n=0 時,返回一個空流。當 n=4 時,打印了 1234n=8 時,打印了所有元素。感覺跟 mysq的分頁有異曲同工之妙。

4. 區別

這兩個方法都是截取了流。但是它們有一些區別 skip 操作必須時刻監測流中元素的狀態。才能判斷是否需要丟棄。所以 skip 屬於狀態操作。

limit 只關心截取的是不是其參數 maxsize (最大區間值),其它毫不關心。一旦達到就立馬中斷操作返回流。所以 limit 屬於一個中斷操作。

5. 總結

今天對Java Stream API 的 skip()limit()方法進行了探討。不知道你會想到在什么場景下會分別用到它們呢,不妨留言告訴我。

關注公眾號:Felordcn獲取更多資訊

個人博客:https://felord.cn


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM