Stream.limit(n)會返回一個包含n個元素的新流(若是原始流的長度小於n,則會返回原始的流)。例如:java
package java8test; import java.util.stream.Stream; public class T2 { public static void main(String[] args) { Stream.generate(Math::random).limit(50).forEach(System.out::println); //注意這句 } }
該示例會產生一個包含50個隨機數字的流。又例:dom
package java8test; import java.util.stream.Stream; public class T2 { public static void main(String[] args) { //注意這句 Stream.of("1","2","3","4","5","6").limit(4).forEach(System.out::println); } }
Stream.skip(n)正好相反,它會丟棄掉前面的n個元素。示例:函數
package java8test; import java.util.stream.Stream; public class T2 { public static void main(String[] args) { //注意這句 Stream.of("1","2","3","4","5","6").skip(4).forEach(System.out::println); } }
你能夠使用Stream類的靜態方法concat將兩個流鏈接到一塊兒:spa
package java8test; import java.util.stream.Stream; public class T2 { public static void main(String[] args) { //注意這句 Stream.concat(Stream.of("1","2","3"), Stream.of("a","b","c")). forEach(System.out::println); } }
固然,第一個流的長度不該該是無限的——不然第二個流就永遠沒有機會被添加到第一個流的後面。調試
peek方法會產生另外一個與原始流具備相同元素的流,可是在每次獲取一個元素時,都會調用一個函數,這樣便於調試:code
package java8test; import java.util.stream.Stream; public class T2 { public static void main(String[] args) { //注意這句 Stream.iterate(1, p -> p*2).peek(n -> System.out.println("num:" + n)). limit(10).forEach(System.out::println);; } }