Java 8 Stream API 中的skip()
和limit()
方法具備相似的做用。它們都是對流進行裁剪的中間方法。今天咱們來探討一下這兩個方法。html
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
時,打印了 5
和 6
,由此可推斷當咱們取值大於等於流的大小時確定什麼也沒有了,對於流來講確定是個空流。通過檢驗確實count=0
。api
也就是說 skip(long n)
方法跳過前 n
(非負)個元素,返回剩下的流,有可能爲空流。測試
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
時,打印了 1
、 2
、3
、 4
。 n=8
時,打印了全部元素。感受跟 mysq的分頁有殊途同歸之妙。code
這兩個方法都是截取了流。可是它們有一些區別 skip
操做必須時刻監測流中元素的狀態。才能判斷是否須要丟棄。因此 skip
屬於狀態操做。cdn
而 limit
只關心截取的是否是其參數 maxsize
(最大區間值),其它絕不關心。一旦達到就立馬中斷操做返回流。因此 limit
屬於一箇中斷操做。htm
今天對Java Stream API 的 skip()
和limit()
方法進行了探討。不知道你會想到在什麼場景下會分別用到它們呢,不妨留言告訴我。blog
關注公衆號:Felordcn獲取更多資訊
ip