Collection接口的stream方法可以将任何集合转化为一个流。如果是一个数组,那么可以用静态的Stream.of方法。
String contents = new String(Files.readAllBytes(
Paths.get(alice.text)),StandardCharsets.UTF_8);
//read file into string
Stream<string> words = Stream.of(contents.split("\\PL"));
//split returns a String[] array
of方法具有可变长参数,因此我们可以构建具有任意数量引元的流。
Stream<string> song = String.of("gently","down","the","stream");
使用Array.stream(array,from,to)可以从数组中位于from(包含)和to(不包含)的元素创建一个流。
为了创建不包含任何元素的流,可以使用静态的Stream.empty方法。
Stream<string> silence = Stream.empty();
Stream有两个用于创建无限流的静态方法。generate方法会接受一个不包含任何引元的函数(或者从技术上讲是一个Supplier<t>接口对象),无论何时,只需要一个流类型的值,该函数就会被调用以产生一个这样的值。
我们可以像下面一样获取一个常量值的流。
Stream<string> echos = Stream.generate(()->"echos");
或者获取一个随机数的流。
Stream<double> randoms = Stream.generate(Math::random)
为了产生无限序列,例如0、1、2、3、4...,可以使用iterate方法。他接受一个“种子”值,以及一个函数(从技术上讲,值一个UnaryOperation<t>),并反复的将该函数应用到之前的结果上。如
Stream<biginteger> integers = Stream.iterate(BigInteger.ZERO,n->add(BigInteger.ONE));
该序列中的第一个元素是种子seed,第二个元素是f(seed),下一个元素的是f(f(seed)),一后以此类推。