steam.peek用法
时间: 2023-10-11 21:05:42 浏览: 192
`Stream.peek()`是Java 8中`Stream`接口提供的一个中间操作方法,它可以用于在流的每个元素上执行一个操作,而不会改变流的内容。
`Stream.peek()`方法接受一个`Consumer`函数式接口作为参数,该接口表示需要在流的每个元素上执行的操作。它返回一个与原始流相同的新流。
下面是`Stream.peek()`方法的基本语法:
```java
Stream<T> peek(Consumer<? super T> action)
```
- `action`:表示在流的每个元素上执行的操作的函数式接口。
使用`Stream.peek()`方法可以用于调试、记录日志、观察流的元素等场景。它是一个有副作用的操作,因为它并不会改变流的内容,只是在每个元素上执行指定的操作。
下面是一个简单示例,演示了如何使用`Stream.peek()`方法:
```java
List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
names.stream()
.peek(System.out::println) // 输出每个元素
.map(String::toUpperCase) // 将元素转换为大写
.forEach(System.out::println); // 输出大写后的元素
```
在上述示例中,`peek(System.out::println)`操作在流的每个元素上打印出元素值。然后,使用`map(String::toUpperCase)`将元素转换为大写,并使用`forEach(System.out::println)`输出大写后的元素。
需要注意的是,`Stream.peek()`方法是一种中间操作,它不会触发流的终止操作。因此,如果只使用`peek()`而没有终止操作,流的操作链将不会被执行。需要在操作链中添加一个终止操作,如`forEach()`或`collect()`等,才能得到结果。
阅读全文