Java 8 Stream Api 中的 skip 和 limit 操做

1. 前言

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

2. skip()

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

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=0api

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

3. limit()

limit(long maxsize) 咱們也如法炮製:spa

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的分頁有殊途同歸之妙。code

4. 區別

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

limit 只關心截取的是否是其參數 maxsize (最大區間值),其它絕不關心。一旦達到就立馬中斷操做返回流。因此 limit 屬於一箇中斷操做。htm

5. 總結

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

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

我的博客:https://felord.cn

相關文章
相關標籤/搜索