本文共 1433 字,大约阅读时间需要 4 分钟。
你已经看到了可以用Collection接口的stream方法将任何集合转换为一个流。如果你有一个数组,那么可以使用静态的Stream.of方法。
of方法具有可变长参数,因此我们可以构建具有任意数量引元的流:
使用Array.stream(array, from, to)可以从数组中位于from(包括)和to(不包括)的元素中创建一个流。
为了创建不包含任何元素的流,可以使用静态的Stream.empty方法:Stream接口有两个用于创建无限流的静态方法。generate方法会接受一个不包含任何引元的函数(或者从技术上讲,是一个Supplier接口的对象)。无论何时,只要需要一个流类型的值,该函数就会被调用以产生一个这样的值。我们可以像下面这样获得一个常量值的流:
或者像下面这样获取一个随机数的流:
为了产生无限序列,例如0 1 2 3 …,可以使用iterate方法。它会接受一个“种子”值,以及一个函数(从技术上讲,是一个UnaryOperation),并且会反复地将该函数应用到之前的结果上。例如,
该序列中的第一个元素是种子BigInteger.ZERO,第二个元素是f(seed),即1(作为大整数),下一个元素是f(f(seed)),即2,后续以此类推。
注意:Java API中有大量方法都可以产生流。例如,Pattern类有一个splitAsStream方法,它会按照某个正则表达式来分割一个CharSequence对象。可以使用下面的语句来将一个字符串分割为一个个的单词:静态的Files.lines方法会返回一个包含了文件中所有行的Stream:
程序清单1-2中的示例程序展示了创建流的各种方式。
程序清单1-2 streams/CreatingStreams.javajava.util.stream.Stream 8
java.util.Arrays 1.2
java.util.regex.Pattern 1.4
java.nio.f?ile.Files 7
产生一个流,它的元素是指定文件中的行,该文件的字符集为UTF-8,或者为指定的字符集。
java.util.function.Supplier 8转载地址:http://ntsza.baihongyu.com/