stream流 peek和map的区别
时间: 2025-02-22 07:26:25 浏览: 74
### Java Stream API 中 `peek` 与 `map` 方法的区别
#### 定义与功能差异
`peek` 是一种主要用于调试目的的方法,在流的操作管道中不会改变元素的内容,而是允许开发者在每次元素被传递给下一个操作之前执行某些副作用动作[^1]。
```java
Stream.of("one", "two", "three", "four")
.filter(e -> e.length() > 3)
.peek(e -> System.out.println("Filtered value: " + e))
.map(String::toUpperCase)
.forEach(System.out::println);
```
相比之下,`map` 则用于转换流中的每一个元素。它接收一个函数作为参数,并应用此函数来创建一个新的流,其中包含由原流各元素映射后的结果[^2]。
```java
List<String> list = Arrays.asList("a", "b", "c");
list.stream()
.map(s -> s.toUpperCase())
.forEach(System.out::println);
```
#### 使用场景的不同
由于 `peek` 不会修改数据流内的任何项,因此通常仅限于日志记录或监控用途;而 `map` 更适用于需要对原始数据进行变换的情形下使用,比如将字符串转成大写形式、计算数值等。
#### 性能考量方面
值得注意的是,虽然两者都可以放置在整个链式的中间位置,但是考虑到性能因素以及意图表达清晰度的要求,应该谨慎选择合适的地方插入这些操作符。特别是对于那些可能引发开销较大的逻辑(如 I/O 访问),应当尽量减少不必要的调用次数[^3]。
阅读全文
相关推荐


















