.stream().peek.collect
时间: 2025-01-16 22:38:09 浏览: 42
### Java 流操作中的 `peek` 方法及其与收集结果的关系
在处理 Java Stream 时,`peek` 是一种中间操作,允许开发者在不改变流元素的情况下对其进行调试或日志记录。由于这是一个中间操作,在调用之后可以继续链式调用其他流操作。
当希望使用 `peek` 来观察流中元素的状态变化并最终收集这些元素到集合或其他结构体时,需要注意的是只有当终端操作被执行时才会触发整个流水线的实际执行[^2]。下面是一个简单的例子来展示如何正确地利用 `peek` 和 `collect`:
```java
import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;
public class PeekExample {
public static void main(String[] args) {
List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
List<String> upperCaseNames = names.stream()
.map(name -> name.toUpperCase())
.peek(System.out::println) // Debugging step: prints each element as it passes through this point.
.collect(Collectors.toList());
System.out.println(upperCaseNames);
}
}
```
在这个案例里,先创建了一个字符串列表作为输入源;接着转换成大写形式,并通过 `peek` 输出每一个被映射后的名字用于验证目的;最后再把它们聚集起来形成一个新的列表输出。
值得注意的是,如果只定义了流而未执行任何终端操作,则不会有任何实际计算发生——这意味着即使有多个像 `filter()` 或者上述代码片段里的 `.map().peek()...` 这样的中间操作存在也不会生效直到遇到诸如 `collect()` 的终结动作为止[^1]。
阅读全文
相关推荐


















