flatMap的详细使用方法和案例
时间: 2023-08-16 19:24:49 浏览: 53
flatMap是一个非常常用的函数式编程方法。在Java 8中,它被添加到了Stream API中,用于处理集合数据。flatMap方法可以将一个集合中的元素,通过一个转换函数,映射成另一个集合。然后再将这些集合合并成一个新的集合。下面是flatMap方法的详细使用方法和案例。
使用方法:
flatMap方法的使用非常简单,只需要在一个Stream对象上调用flatMap方法,并传入一个Function参数即可。这个Function参数会将Stream中的每个元素转换为一个Stream对象,并将所有的Stream对象合并成一个新的Stream对象。示例代码如下:
```java
List<List<String>> list = Arrays.asList(
Arrays.asList("a", "b", "c"),
Arrays.asList("d", "e", "f"),
Arrays.asList("g", "h", "i")
);
List<String> flatList = list.stream()
.flatMap(Collection::stream)
.collect(Collectors.toList());
System.out.println(flatList); //输出 [a, b, c, d, e, f, g, h, i]
```
在上面的示例代码中,我们定义了一个包含三个List<String>对象的List对象。然后使用Stream API中的flatMap方法将这些List对象中的所有元素合并成一个新的List对象。
案例:
1. 将多个List合并成一个List
```java
List<List<String>> lists = new ArrayList<>();
lists.add(Arrays.asList("apple", "banana", "cherry"));
lists.add(Arrays.asList("date", "elderberry", "fig"));
lists.add(Arrays.asList("grape", "honeydew", "kiwi"));
List<String> flatList = lists.stream()
.flatMap(List::stream)
.collect(Collectors.toList());
System.out.println(flatList); //输出 [apple, banana, cherry, date, elderberry, fig, grape, honeydew, kiwi]
```
在这个案例中,我们将三个List对象合并成了一个List对象。首先我们定义了一个List<List<String>>对象lists,其中包含了三个String类型的List对象。然后使用Stream API中的flatMap方法将这三个List对象中的所有元素合并成一个新的List对象。
2. 将多个List中的元素去重后合并成一个List
```java
List<List<String>> lists = new ArrayList<>();
lists.add(Arrays.asList("apple", "banana", "cherry"));
lists.add(Arrays.asList("apple", "date", "elderberry"));
lists.add(Arrays.asList("banana", "fig", "grape"));
List<String> flatList = lists.stream()
.flatMap(List::stream)
.distinct()
.collect(Collectors.toList());
System.out.println(flatList); //输出 [apple, banana, cherry, date, elderberry, fig, grape]
```
在这个案例中,我们将三个List对象中的所有元素去重后合并成了一个新的List对象。首先我们定义了一个List<List<String>>对象lists,其中包含了三个String类型的List对象。然后使用Stream API中的flatMap方法将这三个List对象中的所有元素合并成一个新的List对象。最后使用distinct方法去重,最终得到了一个不包含重复元素的List对象。