peek forEach
时间: 2023-07-26 16:20:20 浏览: 109
`peek()` 和 `forEach()` 都是 Stream API 提供的中间操作,用于对流中的元素进行处理,但两者有着不同的作用。
`peek()` 方法允许我们在处理流的过程中,对每个元素执行一个操作,例如打印日志或者调试信息。`peek()` 不会影响到流的处理结果,它仅仅是在处理流的过程中,对流中的元素执行一个操作。`peek()` 方法的返回值类型还是一个 Stream,因此可以继续进行后续的操作。
`forEach()` 方法则是一种终止操作,用于对流中的每个元素执行一个操作,例如打印日志或者保存数据等。`forEach()` 操作执行完毕后,流就无法再被使用了。
示例代码如下:
```
List<String> list = Arrays.asList("apple", "banana", "pear", "orange");
list.stream()
.filter(str -> str.startsWith("a"))
.peek(str -> System.out.println("Before map: " + str))
.map(String::toUpperCase)
.peek(str -> System.out.println("After map: " + str))
.forEach(str -> System.out.println("Result: " + str));
```
运行上述代码,会输出以下内容:
```
Before map: apple
After map: APPLE
Result: APPLE
```
可以看到,在执行 `forEach()` 操作时,我们对处理后的结果进行了输出,而 `peek()` 方法对每个元素进行了操作,但并不会影响到处理结果。
总结来说,`peek()` 和 `forEach()` 都是对流中的元素进行处理的方法,但 `peek()` 方法不会终止流的处理,而 `forEach()` 方法则是一种终止操作,用于对流中的元素进行最终的处理。
阅读全文