返回

流式操作:Java 8 Stream 中操作类型和 peek 的使用

闲谈

在 Java 8 中,Stream 是一种强大且通用的工具,可用于处理数据集合。Stream 操作可以分为两大类:中间操作和终止操作。中间操作不会立即计算结果,而是生成一个新的流。终止操作会立即计算结果,并且返回一个值或执行某个操作。

中间操作可以分为两类:有状态操作和无状态操作。有状态操作会修改流中的元素,而无状态操作不会修改流中的元素。peek 方法是一种特殊的有状态中间操作,允许我们在流式操作的中间阶段观察流中的元素。

peek 方法的语法如下:

<R> Stream<R> peek(Consumer<? super T> action);

其中:

  • T 是流中元素的类型。
  • R 是 peek 操作返回的流中元素的类型。
  • Consumer 是一个函数式接口,它接受一个参数并返回 void。

peek 方法接收一个 Consumer 作为参数,该 Consumer 会对流中的每个元素执行某个操作。Consumer 可以做任何事情,例如打印元素、修改元素或将元素存储到另一个集合中。

例如,以下代码使用 peek 方法来打印流中的元素:

List<String> strings = Arrays.asList("a", "b", "c", "d", "e");

strings.stream()
        .peek(System.out::println)
        .count();

输出结果:

a
b
c
d
e
5

如你所见,peek 方法不会修改流中的元素。它只是允许我们在流式操作的中间阶段观察流中的元素。

peek 方法可以用于调试和监控流式操作。例如,我们可以使用 peek 方法来检查流中的元素是否满足某个条件。以下代码使用 peek 方法来检查流中的元素是否大于 2:

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);

numbers.stream()
        .peek(n -> {
            if (n > 2) {
                System.out.println(n);
            }
        })
        .count();

输出结果:

3
4
5
3

如你所见,peek 方法只打印了大于 2 的元素。

peek 方法是一个非常有用的工具,可以用于调试和监控流式操作。它允许我们在流式操作的中间阶段观察流中的元素,并根据需要执行某些操作。