【Java 8 新特性】Java Stream 通過skip()方法跳過前N個子元素
【Java 8 新特性】Java Stream 通過skip方法跳過前N個子元素
本頁將介紹
Stream.skip
方法示例。
skip
方法在跳過流的第一個給定元素之後返回一個由該流的其餘元素組成的流。
從javadoc中找到skip
方法宣告。
Stream<T> skip(long n)
引數:傳遞要跳過的前導元素數。
返回:該方法返回一個跳過元素的新流。
異常:如果我們傳遞負數,它將丟擲IllegalArgumentException。
- skip方法用於從一開始跳過給定數量元素的源流建立新流。
- skip方法對於有序並行管道,特別是對於n個數較多的情況,代價較高。
- skip方法是順序流管道的廉價操作。
- 如果要跳過的元素數n等於或大於流中的元素數,則輸出將為空流。
- skip是有狀態的中間操作(
stateful intermediate operation
)。
有狀態中間操作(stateful intermediate operation
)
中間操作分為無狀態操作和有狀態操作。在處理諸如filter和map這樣的新元素時,無狀態操作不會保留以前看到的元素的狀態。當處理新元素(如skip和limit方法)時,有狀態操作可能包含以前看到的元素的狀態。
1.skip() 示例
找到一些skip() 方法的例子。
示例1:
在這個例子中,我們有一個整數元素流,我們使用skip
方法來獲得新的流,其中前三個元素將被丟棄.
Stream.of(10, 20, 30, 40, 50)
.skip(3)
.forEach(System.out::println);
輸出將是40,50。
示例2:
在這個例子中,我們有一個整數流。首先我們過濾它,提取偶數,然後在最後的結果中跳過前2個子元素.
Stream.of("C", "B", "D", "F", "E", "A")
.sorted()// A,B,C,D,E,F
.skip(2) //C,D,E,F
.forEach(System.out::println);
輸出為C,D,E,F。
示例3:
這裡有亂序的字母表,先按排序,然後跳過前2個元素。
Stream.of("C", "B", "D", "F", "E", "A")
.sorted()// A,B,C,D,E,F
.skip(2) //C,D,E,F
.forEach(System.out::println);
輸出為C,D,E,F。
示例4:
在這個例子中,我們將跳過比流中元素數更多的元素。輸出將為空流。
Stream.of("A", "B", "C", "D")
.skip(5)
.forEach(System.out::println);
這將不列印任何內容,因為跳過後流中沒有元素。
2.skip() vs limit()
skip
方法從開始處丟棄給定數量的元素並返回新的流,剩餘的元素數直到最後一個元素,而limit方法
返回從第一個元素開始的給定數量的元素。
skip
和limit
都是中間操作並返回新的流。
示例1:
這裡有一個整數列表。我們將在源流上執行limit
和skip
兩者。看看結果。
SkipLimitDemo.java
package com.concretepage;
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class SkipLimitDemo {
public static void main(String[] args) {
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8);
List<Integer> afterLimit = list.stream().limit(4).collect(Collectors.toList());
List<Integer> afterSkip = list.stream().skip(4).collect(Collectors.toList());
System.out.println("Limit: " + afterLimit);
System.out.println("Skip: " + afterSkip);
}
}
輸出
Limit: [1, 2, 3, 4]
Skip: [5, 6, 7, 8]
示例2:
在這個例子中,我們將首先對源元素執行skip
,然後在skip
方法返回的流上執行limit
方法。
Stream.of(1,2,3,4,5,6,7,8)
.skip(2) //3,4,5,6,7,8
.limit(2) //3,4
.forEach(System.out::println);
輸出為3,4。
參考文獻
相關文章
- Java 8 新特性 StreamJava
- Java8新特性--Stream APIJavaAPI
- java8新特性stream流Java
- java 8 特性——stream流Java
- Java 8 新特性:Stream 流快速入門Java
- Java8新特性探索之Stream介面Java
- JAVA 1.8 新特性 StreamJava
- Java8 新特性 —— Stream 流式程式設計Java程式設計
- Java 8 新特性之方法引用Java
- Java8 新特性 Stream流操作List集合 (二)Java
- 分享幾種 Java8 中通過 Stream 對列表進行去重的方法Java
- java8 新特性之方法引用Java
- Java8新特性——從Lambda表示式到Stream流Java
- Java 8 新特性Java
- Java 8 新特性Java
- 4.pytest 之 skip 跳過
- 13. 尚矽谷_Java8新特性_Stream API 練習JavaAPI
- java8 新特性之預設方法Java
- JAVA8新特性Java
- Java8 新特性Java
- Java9新特性系列(Stream改進)Java
- 【Java8新特性】關於Java8的Stream API,看這一篇就夠了!!JavaAPI
- Java 8 StreamJava
- Java8新特性 - LambdaJava
- Java 8 新特性---Optional類Java
- Java8的新特性Java
- JAVA8新特性用法Java
- 碎片化學習Java(二十三)Java continue跳過當前迴圈Java
- 【Java8新特性】面試官問我:Java8中建立Stream流有哪幾種方式?Java面試
- 【Java8新特性】面試官:談談Java8中的Stream API有哪些終止操作?Java面試API
- JDK8新特性之stream()JDK
- Java8新特性系列-LambdaJava
- Java8新特性之:OptionalJava
- Java 8 新特性——實踐篇Java
- Java8新特性實踐Java
- Java 8新特性(三):Optional類Java
- Java8 新特性詳解Java
- java -方法- 過載Java