本页将介绍Stream.generate
方法示例。generate
方法返回一个无限连续的无序流,其中每个元素由提供的供应商(Supplier
)生成。generate
方法用于生成常量流和随机元素流。
从javadoc找到generate
方法声明。
static <T> Stream<T> generate(Supplier<? extends T> s)
参数:传递生成流元素的供应商(Supplier
)。
返回:它返回一个新的无限顺序无序的流(Stream
)。
示例1:
下面是生成随机整数流的例子
Stream<Integer> stream = Stream.generate(() -> new Random().nextInt(10));
stream.forEach(e -> System.out.println(e));
输出
2
5
1
--- #略
下面是生成随机布尔流的示例
Stream.generate(() -> new Random().nextBoolean())
.forEach(e -> System.out.println(e));
输出
true
false
true
--- #略
下面是生成常量流的示例
Stream.generate(() -> "Hello World!")
.forEach(e -> System.out.println(e));
输出
Hello World!
Hello World!
Hello World!
--- #略
示例2
众所周知,generate
返回无限连续流,为了限制流中元素的数量,我们可以使用Stream.limit
方法
LimitGenerateDemo.java
package com.concretepage;
import java.util.Random;
import java.util.stream.Stream;
public class LimitGenerateDemo {
public static void main(String[] args) {
Stream.generate(() -> new Random().nextInt(10)).limit(3)
.forEach(e -> System.out.println(e));
Stream.generate(() -> new Random().nextBoolean()).limit(3)
.forEach(e -> System.out.println(e));
Stream.generate(() -> "Hello World!").limit(3)
.forEach(e -> System.out.println(e));
}
}
输出
3
1
3
true
false
false
Hello World!
Hello World!
Hello World!
示例3
IntStream
、LongStream
和DoubleStream
中的generate
方法声明。
对于IntStream
:
static IntStream generate(IntSupplier s)
对于LongStream
:
static LongStream generate(LongSupplier s)
对于DoubleStream
:
static DoubleStream generate(DoubleSupplier s)
现在查看下面的例子
GenerateDemo.java
package com.concretepage;
import java.util.Random;
import java.util.stream.DoubleStream;
import java.util.stream.IntStream;
import java.util.stream.LongStream;
public class GenerateDemo {
public static void main(String[] args) {
System.out.println("--- IntStream ---");
IntStream.generate(() -> new Random().nextInt()).limit(3)
.forEach(e -> System.out.println(e));
System.out.println("--- LongStream ---");
LongStream.generate(() -> new Random().nextLong()).limit(3)
.forEach(e -> System.out.println(e));
System.out.println("--- DoubleStream ---");
DoubleStream.generate(() -> new Random().nextDouble()).limit(3)
.forEach(e -> System.out.println(e));
}
输出
--- IntStream ---
1208611141
1228590173
1248692128
--- LongStream ---
-1743816652457802629
-5799826804201802284
795354974140733326
--- DoubleStream ---
0.8264963255616102
0.6543249573645461
0.037807208216310784