stream的map和peek
时间: 2024-03-08 07:42:52 浏览: 118
stream的map和peek是Java 8中Stream API提供的两个常用方法。
1. map方法:map方法用于将流中的每个元素映射到另一个元素。它接受一个函数作为参数,该函数将流中的每个元素转换为另一个元素,并返回一个新的流。这个新的流中的元素类型可以与原始流中的元素类型不同。
2. peek方法:peek方法用于对流中的每个元素执行一些操作,而不会改变流中的元素。它接受一个Consumer函数作为参数,该函数对流中的每个元素执行一些操作,例如打印元素或修改元素的状态。peek方法返回的流与原始流相同。
这两个方法的区别在于map方法会对流中的每个元素进行转换,并返回一个新的流,而peek方法只是对流中的每个元素执行一些操作,并返回原始流。因此,map方法可以用于对流中的元素进行转换操作,而peek方法可以用于在流的处理过程中进行调试或记录日志。
相关问题
stream流中的map和peek
### Java Stream 中 `map` 和 `peek` 方法的区别及用法
#### 1. **`map` 方法**
`map` 是一种中间操作,用于将流中的每个元素转换为另一种形式或类型的元素。它接受一个函数作为参数,并对该函数传入的每一个元素应用该函数,返回一个新的流。
- 它的主要用途是对数据进行映射或转换。
- 返回的是经过处理后的新的流对象。
代码示例:
```java
List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
List<Integer> lengths = names.stream()
.map(String::length) // 将字符串映射为其长度
.collect(Collectors.toList());
System.out.println(lengths); // 输出: [5, 3, 7]
```
此行为表明 `map` 的核心作用在于改变流中元素的形式[^1]。
---
#### 2. **`peek` 方法**
`peek` 同样是一种中间操作,但它主要用于调试目的。它可以让你在不修改流的情况下查看流中的元素。`peek` 接受一个消费型的操作(Consumer),并对流中的每个元素执行这个操作。
- 主要目的是观察流的状态而不影响最终结果。
- 不会对流的内容做任何实质性的更改。
代码示例:
```java
List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
List<String> upperCaseNames = names.stream()
.peek(name -> System.out.println("Original name: " + name)) // 打印原始名称
.map(String::toUpperCase) // 转换为大写
.peek(name -> System.out.println("Upper case name: " + name)) // 打印大写名称
.collect(Collectors.toList());
System.out.println(upperCaseNames); // 输出: [ALICE, BOB, CHARLIE]
```
上述例子展示了如何利用 `peek` 来打印日志以便于跟踪流管道内的变化过程。
---
#### 3. **主要区别**
| 特性 | `map` | `peek` |
|-------------------|-------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------|
| **功能** | 对流中的每个元素应用给定的函数并返回新流 | 对流中的每个元素执行指定的动作但不会改变它们 |
| **目标** | 数据变换 | 流程监控 |
| **适用场景** | 需要对数据结构或者值进行转化时 | 当需要记录日志或其他副作用而不需要实际改变数据本身的时候 |
---
### 总结
虽然两者都是流上的中间操作,但是他们的设计意图完全不同:一个是用来改造数据(`map`);另一个则是为了辅助开发人员更好地理解程序运行流程(`peek`)。因此,在日常编码实践中应依据具体需求合理选用这两种工具之一来构建高效的解决方案。
stream peek和map
Stream的peek和map方法都是用于对流中的元素进行处理和转换的方法。
peek方法接受一个Consumer函数作为参数,对流中的每个元素执行操作,并返回一个新的流。peek方法不会改变流中的元素,而只是提供了一种查看流中元素值的方法。通常在调试或日志记录中使用peek方法来观察流中的元素值。
map方法接受一个Function函数作为参数,将流中的每个元素进行转换,并返回一个新的流。map方法会将输入流中的每个元素映射为输出流中的另一个元素。常用于将一种类型的元素转换为另一种类型。例如,可以使用map将字符串列表中的元素转换为大写字母:
List<String> output = Stream.of("a", "b", "c", "d")
.map(String::toUpperCase)
.collect(Collectors.toList());
以上代码将输入流中的每个字符串元素转换为大写,并将结果收集到一个列表中。
所以,peek方法主要用于对流中的元素进行操作和观察,而map方法则用于将流中的元素进行转换。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *3* [Stream的peek和map的区别](https://blog.csdn.net/embelfe_segge/article/details/124445220)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"]
- *2* [Stream中的map和peek,你用废了么?](https://blog.csdn.net/qq_28165595/article/details/124909043)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]
阅读全文
相关推荐
















