java8之Stream API(提取子流和組合流)

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);;
    }
}
相關文章
相關標籤/搜索