1.2 创建流
你已经知道可以通过实现了 Collection 接口的 stream 方法来将集合转化为 stream。当你想要将数组转化为stream 时,那么应该使用静态方法 Stream.of 。
1 | Stream<String> words = Stream.of(contents.split("[\\P{L}]+")); |
这个方法有 varargs 参数,所以你可以根据参数的不同来创建不同的流。
1 | Stream<String> song = Stream.of("gently", "down", "the", "stream"); |
Stream 接口通过两个静态方法来创建无穷的流,generate() 方法采用没有参数的函数(从技术角度上来说,是Supplier
1 | Stream<String> echos = Stream.generate(() -> "Echo"); |
要生成一个无穷的序列,例如 0,1,2,3…那么使用迭代会好一点,它获取一个子值和一个函数,然后重复调用此函数来作用于之前的结果。例如
1 | Stream<BigInteger> integers |
第一个在序列中的元素为0,然后第二个元素为 f(seed) /1,接着下一个元素为 f(f(seed)) /2,循环往复。
Java API中的许多方法都会产生流。 例如,Pattern类具有方法 splitAsStream(),该方法通过正则表达式拆分CharSequence。 可以使用以下语句将字符串拆分为单词:
1 | Stream<String> words = Pattern.compile("[\\P{L}]+").splitAsStream(contents); |
以下 1.2 的示例程序展示了创建流的各种方法
1 | 1 package streams; |