stream.map 和stream.flatmap的详细区别 并代码举例
时间: 2023-06-03 15:05:57 浏览: 211
stream.map 和stream.flatmap 是 Java 8 Stream API 中常用的函数式接口。它们的区别在于,map 会将元素进行一对一的转换,而 flatMap 则会将元素进行一对多的转换,并将多个流合并为一个流。
具体来说,map 函数会将每个元素应用给定的函数,然后返回一个新的流。例如,如果我们有一个字符串流,想将每个字符串都转换为其长度,则可以使用如下代码:
```java
Stream<String> stringStream = Stream.of("hello", "world", "java");
Stream<Integer> lengthStream = stringStream.map(String::length);
```
flatMap 函数则会将每个元素应用给定的函数,并将结果流合并为一个流。例如,如果我们有一个字符串流,想将每个字符串拆分成单词,然后将多个流合并为一个流,则可以使用如下代码:
```java
Stream<String> stringStream = Stream.of("hello world", "java rocks");
Stream<String[]> splitStream = stringStream.map(s -> s.split("\\s+"));
Stream<String> flatMapStream = splitStream.flatMap(Arrays::stream);
```
在上面的代码中,我们首先将每个字符串拆分成单词,产生了一个包含字符串数组的流。接着,我们使用 flatMap 将多个字符串数组流合并为一个单词流。
注意,如果元素类型不是 Stream,使用 flatMap 会导致编译错误。此外,flatMap 还有一个参数,可以指定最终合并为一个流的类型,否则将自动根据输入流的类型推断。
阅读全文