在Java的Stream API中,map 和 flatMap 是两个常用的方法,它们都用于转换流中的元素,但使用场景和转换的方式有所不同。
时间: 2024-12-18 13:36:17 浏览: 0
在Java的Stream API中,`map()` 和 `flatMap()` 都是用来对集合中的每个元素进行处理并返回一个新的流,但它们之间有关键的区别:
1. **map()**:这个方法主要用于将每个元素应用一个函数(lambda表达式或方法引用),然后返回包含新值的新流。它并不改变原始元素的结构,而是简单地变换每个元素的内容。例如,如果你有一个整数列表,你可以使用`map()`将其转换为字符串列表。
示例:
```java
List<Integer> numbers = Arrays.asList(1, 2, 3);
Stream<String> stringStream = numbers.stream().map(String::valueOf); // 返回 "1", "2", "3"
```
2. **flatMap()**:相比之下,`flatMap()` 更适合于那些需要展开元素内部的嵌套结构的情况。它会对每个元素应用一个函数,并将结果收集到一个单独的流中,如果原元素是另一个流的话,那么会将这两个流连接起来。比如,从一个用户列表中获取每个用户的地址列表,就可以用`flatMap()`。
示例:
```java
List<User> users = ...;
Stream<String> addresses = users.stream().flatMap(user -> user.getAddresses().stream()); // 返回所有用户的地址,假设User有一个getAddresses()方法返回流
```
阅读全文