官术网_书友最值得收藏!

1.2 流的創建

你已經看到了可以用Collection接口的stream方法將任何集合轉換為一個流。如果你有一個數組,那么可以使用靜態的Stream.of方法。

of方法具有可變長參數,因此我們可以構建具有任意數量引元的流:

使用Array.stream(array,from,to)可以從數組中位于from(包括)和to(不包括)的元素中創建一個流。

為了創建不包含任何元素的流,可以使用靜態的Stream.empty方法:

Stream接口有兩個用于創建無限流的靜態方法。generate方法會接受一個不包含任何引元的函數(或者從技術上講,是一個Supplier<T>接口的對象)。無論何時,只要需要一個流類型的值,該函數就會被調用以產生一個這樣的值。我們可以像下面這樣獲得一個常量值的流:

或者像下面這樣獲取一個隨機數的流:

為了產生無限序列,例如0 12 3…,可以使用iterate方法。它會接受一個“種子”值,以及一個函數(從技術上講,是一個UnaryOperation<T>),并且會反復地將該函數應用到之前的結果上。例如,

該序列中的第一個元素是種子BigInteger.ZERO,第二個元素是f(seed),即1(作為大整數),下一個元素是f(f(seed)),即2,后續以此類推。

注意:Java API中有大量方法都可以產生流。例如,Pattern類有一個splitAsStream方法,它會按照某個正則表達式來分割一個CharSequence對象??梢允褂孟旅娴恼Z句來將一個字符串分割為一個個的單詞:

靜態的Files.lines方法會返回一個包含了文件中所有行的Stream:

程序清單1-2中的示例程序展示了創建流的各種方式。

程序清單1-2 streams/CreatingStreams.java

java.util.stream.Stream 8

·static<T>Stream<T>of(T... values)

產生一個元素為給定值的流。

·static<T>Stream<T>empty()

產生一個不包含任何元素的流。

·static<T>Stream<T>generate(Supplier<T>s)

產生一個無限流,它的值是通過反復調用函數s而構建的。

·static<T>Stream<T>iterate(T seed,UnaryOperator<T>f)

產生一個無限流,它的元素包含種子、在種子上調用f產生的值、在前一個元素上調用f產生的值,等等。

java.util.Arrays 1.2

·static<T>Stream<T>stream(T[]array,int startInclusive,int endExclusive)8

產生一個流,它的元素是由數組中指定范圍內的元素構成的。

java.util.regex.Pattern 1.4

·Stream<String>splitAsStream(CharSequence input)8

產生一個流,它的元素是輸入中由該模式界定的部分。

java.nio.file.Files 7

·static Stream<String>lines(Path path)8

·static Stream<String>lines(Path path,Charset cs)8

產生一個流,它的元素是指定文件中的行,該文件的字符集為UTF-8,或者為指定的字符集。

java.util.function.Supplier<T>8

·T get()

提供一個值。

主站蜘蛛池模板: 稷山县| 昆山市| 永定县| 手机| 曲靖市| 上虞市| 锦州市| 雷波县| 四平市| 运城市| 朝阳区| 宁明县| 鄱阳县| 宜春市| 嘉峪关市| 奈曼旗| 岐山县| 岚皋县| 裕民县| 鹰潭市| 原平市| 喀喇沁旗| 靖江市| 汤阴县| 南木林县| 万州区| 吉木乃县| 剑阁县| 长丰县| 化州市| 芜湖市| 五莲县| 东城区| 土默特右旗| 宜良县| 盐池县| 四子王旗| 文山县| 赣榆县| 鹰潭市| 汕头市|