📜  Java中的 Stream.Builder 构建()(1)

📅  最后修改于: 2023-12-03 15:31:55.538000             🧑  作者: Mango

Java中的 Stream.Builder 构建()

介绍

Stream.Builder 是 Java 8 中新增的类,用于构建 Stream。它提供了一种灵活的方式来创建 Stream,尤其是当我们需要在运行时才知道 Stream 元素的数量和内容时。

Stream.Builder 的特点:

  • 可以动态添加元素。
  • 可以使用 add 方法添加一个元素,也可以使用 accept 方法添加一个元素。
  • 可以创建无限长度的 Stream。
  • 可以使用 build 方法来创建 Stream。
构建

要使用 Stream.Builder,我们需要首先创建一个 Stream.Builder 对象,然后向其中添加元素,最后调用 build 方法来创建 Stream。下面是一个示例:

Stream.Builder<String> builder = Stream.builder();
builder.add("Java");
builder.add("Python");
builder.add("JavaScript");

Stream<String> stream = builder.build();
stream.forEach(System.out::println);
// 输出:
// Java
// Python
// JavaScript
动态添加元素

在上面的示例中,我们使用了 add 方法来将元素逐个加入 Builder 中。但如果我们有一批元素需要添加,可以使用 accept 方法,如下所示:

Stream.Builder<String> builder = Stream.builder();

Arrays.asList("Java", "Python", "JavaScript").forEach(builder::accept);
Stream<String> stream = builder.build();
stream.forEach(System.out::println);
// 输出:
// Java
// Python
// JavaScript
创建无限长度的 Stream

如果需要创建一个无限长度的 Stream,可以使用 Stream.Builder 中的 add 方法,它可以接受一个 Supplier 参数,该参数会生成 Stream 的元素。下面是一个示例:

Stream.Builder<Integer> builder = Stream.builder();
int seed = 0;
builder.add(seed);
builder.add(() -> seed + 1);
builder.add(() -> seed + 2);

Stream<Integer> stream = builder.build().limit(10);
stream.forEach(System.out::println);
// 输出:
// 0
// 1
// 2
// 1
// 2
// 3
// 2
// 3
// 4
// 3

上面的示例中,我们使用 add 方法添加了三个元素,其中第二个和第三个元素是通过 Supplier 返回生成的。这里需要注意的是,无限长度的 Stream 必须使用 limit 来限制 Stream 的长度,否则会出现无限循环的情况。

总结

Stream.Builder 是 Java 8 中一个非常实用的类,用于创建 Stream。它可以动态添加元素,也可以创建无限长度的 Stream,非常灵活。如果我们需要在运行时才知道 Stream 元素的数量和内容,Stream.Builder 绝对是非常实用的。