Java8中Stream的map与flatmap区别
时间: 2023-03-30 17:01:32 浏览: 197
Java8中Stream的map与flatmap的区别在于,map将一个元素映射为另一个元素,而flatmap将一个元素映射为一个流,然后将这个流中的元素合并为一个新的流。简单来说,map是一对一的映射,而flatmap是一对多的映射。
相关问题
java stream map 跟flatmap区别
Java 8 引入了 Stream API,其中 map() 和 flatMap() 是其重要的操作方法之一。它们都可以将一个流中的元素转换为另一种形式,但是它们之间存在一些区别。
map() 方法会接收一个 Function 函数作为参数,将流中的每个元素都映射为另一个元素,最后返回一个新的流。map() 方法不会改变流中元素的类型,只是将每个元素映射为另一个元素。例如:
```
List<String> list = Arrays.asList("apple", "banana", "orange");
List<String> newList = list.stream()
.map(str -> str.toUpperCase())
.collect(Collectors.toList());
```
上面代码将 list 中每个字符串转换为大写形式,并返回一个新的字符串列表。
而 flatMap() 方法则接收一个 Function 函数作为参数,将流中的每个元素都转换为另一个流,最后将所有的流连接起来形成一个新的流。flatMap() 方法可以用于将多个集合中的元素合并成一个流,例如:
```
List<List<String>> lists = new ArrayList<>();
lists.add(Arrays.asList("apple", "banana"));
lists.add(Arrays.asList("orange", "pear"));
List<String> newList = lists.stream()
.flatMap(list -> list.stream())
.collect(Collectors.toList());
```
上面代码将多个字符串列表合并成一个新的字符串列表。
java stream流中map 和flatmap
Java Stream中的map和flatMap都是用于对Stream中的元素进行转换的方法,不同之处在于map只能将一个元素转换为另一个元素,而flatMap可以将一个元素转换为多个元素。
具体来说,map方法接收一个Function函数式接口作为参数,该函数式接口将Stream中的每个元素映射为另一个元素,并将映射后的结果放入一个新的Stream中返回。例如:
```
List<String> words = Arrays.asList("hello", "world");
List<Integer> wordLengths = words.stream()
.map(String::length)
.collect(Collectors.toList());
```
上述代码中,我们将一个包含两个字符串的List转换为一个包含两个整数的List,其中每个整数表示对应字符串的长度。
而flatMap方法则接收一个Function函数式接口作为参数,该函数式接口将Stream中的每个元素映射为一个Stream,然后将所有Stream中的元素合并为一个新的Stream返回。例如:
```
List<List<Integer>> numbers = Arrays.asList(Arrays.asList(1, 2), Arrays.asList(3, 4));
List<Integer> flattenedNumbers = numbers.stream()
.flatMap(List::stream)
.collect(Collectors.toList());
```
上述代码中,我们将一个包含两个List的List转换为一个包含四个整数的List,其中每个整数来自于原始List中的一个子List。
阅读全文
相关推荐
















