stream中的map和flatmap的区别是?
时间: 2024-05-06 22:15:41 浏览: 88
在Java 8中,Stream API提供了两个非常有用的操作符,即map()和flatMap()。这两个操作符都接受一个函数作为参数,并将其应用于流中的每个元素。但是,它们的行为有所不同。
map()操作符将一个元素转换为另一个元素,因此输出流的大小与输入流的大小相同。它将每个元素应用于给定的函数,并将函数的结果包装在一个新的流中。例如,如果您有一个包含字符串的流,并且想将每个字符串转换为其长度,则可以使用以下代码:
```
List<String> strings = Arrays.asList("apple", "banana", "orange");
List<Integer> lengths = strings.stream()
.map(String::length)
.collect(Collectors.toList());
```
flatMap()操作符将元素转换为另一个流,因此可以为每个元素生成多个元素,并且输出流的大小可能与输入流的大小不同。它将每个元素应用于给定的函数,并将函数返回的流的所有元素合并为一个新的流。例如,如果您有一个包含单词的流,并且想将每个单词拆分为其字母,则可以使用以下代码:
```
List<String> words = Arrays.asList("Hello", "World");
List<String> letters = words.stream()
.flatMap(word -> Arrays.stream(word.split("")))
.collect(Collectors.toList());
```
在上面的代码中,flatMap操作符将每个单词拆分为字母,并将其合并为一个流,最终输出流包含了所有单词的字母。
阅读全文