Stream 中的 map、peek、foreach 方法的区别? -------------------------------------------------- 版权声明:未经授权,禁止私自复制、盗取、采集、转载到其他平台。 本文链接:https://www.javastack.cn/stream-map-peek-foreach/ --------------------------------------------------
时间: 2023-02-07 07:42:20 浏览: 67
Stream 类的 map 方法可以将输入的数据映射成另一种形式的输出。在具体使用时,你需要提供一个函数作为参数,这个函数会被应用到 Stream 中的每一个元素上,最后将这些转换后的元素放到一个新的 Stream 中并返回。
Stream 类的 peek 方法与 map 方法类似,但它的目的是为了调试。peek 方法接受一个 Consumer 函数作为参数,你可以在 Consumer 函数中编写调试代码。peek 方法会在 Stream 中的每一个元素上应用这个 Consumer 函数,但是和 map 不同的是,peek 不会对 Stream 中的元素进行转换,它只是简单地执行一个 Consumer 函数,然后将元素原封不动地传递到下一步。
Stream 类的 foreach 方法接受一个 Consumer 函数作为参数,并对 Stream 中的每一个元素应用这个 Consumer 函数。foreach 方法不会返回任何值,它只是简单地对 Stream 中的每一个元素执行一个 Consumer 函数。
总之,map 方法将 Stream 中的元素进行转换并返回一个新的 Stream,peek 方法对 Stream 中的元素执行一个 Consumer 函数但是不进行转换,foreach 方法对 Stream 中的每一个元素执行一个 Consumer 函数但是不返回任何值。
相关问题
java中,stream().map 与 stream().peek 区别 ?
在Java中,stream().map()和stream().peek()是两个不同的操作。其中,stream().map()是将一个函数应用于流中的每个元素,并返回一个新的流,而stream().peek()则是返回一个由原始流中的元素组成的流,同时在从生成的流中消耗元素时对每个元素执行提供的操作。
举个例子,假设我们有一个整数列表,我们想要将每个整数乘以2并打印出来。我们可以使用stream().map()来实现这个操作:
```java
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> doubledNumbers = numbers.stream().map(n -> n * 2).collect(Collectors.toList());
System.out.println(doubledNumbers);
```
输出结果为:[2, 4, 6, 8, 10]
如果我们想要查看原始列表中的每个元素,可以使用stream().peek()来实现:
```java
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
numbers.stream().peek(System.out::println).forEach(n -> System.out.println("Doubled: " + (n * 2)));
```
输出结果为:
```
1
Doubled: 2
2
Doubled: 4
3
Doubled: 6
4
Doubled: 8
5
Doubled: 10
```
stream流中的peek和foreach
在Java中,Stream是一种用于处理集合数据的抽象概念。其中,peek和forEach都是Stream中的方法。
peek方法允许我们查看每个元素,但不改变它们的状态。它可以用于调试或记录Stream中的元素。例如,我们可以使用peek方法打印每个元素:
```
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
numbers.stream()
.peek(System.out::println)
.count();
```
这将输出1、2、3、4和5,并返回Stream中的元素数。
forEach方法允许我们对Stream中的每个元素执行操作。它不会返回任何值。例如,我们可以使用forEach方法打印每个元素:
```
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
numbers.stream()
.forEach(System.out::println);
```
这将输出1、2、3、4和5,但不会返回任何值。注意,如果我们想要在Stream中执行某些操作,并返回结果,我们应该使用map或reduce等方法。