flatMap
是 Java 8 中引入的一个流操作,它主要用于将多个流合并成一个流,并将每个流中的元素转换成另一种形式
List<List<T>>
:将多个列表合并成一个流,每个列表中的元素都会被转换成流中的元素。例如,你可以使用 flatMap
将一个二维列表转换为一个一维流。List<List<Integer>> lists = Arrays.asList(
Arrays.asList(1, 2, 3),
Arrays.asList(4, 5, 6),
Arrays.asList(7, 8, 9)
);
Stream<Integer> flatStream = lists.stream().flatMap(list -> list.stream());
Set<T>
:将一个集合转换为一个流,同时消除重复元素。例如,你可以使用 flatMap
将一个 Set<List<Integer>>
转换为一个 Stream<Integer>
。Set<List<Integer>> sets = new HashSet<>();
sets.add(Arrays.asList(1, 2, 3));
sets.add(Arrays.asList(4, 5, 6));
sets.add(Arrays.asList(1, 2, 3)); // 重复元素,将被消除
Stream<Integer> flatStream = sets.stream().flatMap(list -> list.stream());
Map<K, V>
:将一个映射的键值对转换为一个流,其中每个键值对都被转换为一个包含键和值的流元素。例如,你可以使用 flatMap
将一个 Map<String, List<Integer>>
转换为一个 Stream<Integer>
。Map<String, List<Integer>> map = new HashMap<>();
map.put("a", Arrays.asList(1, 2, 3));
map.put("b", Arrays.asList(4, 5, 6));
map.put("c", Arrays.asList(7, 8, 9));
Stream<Integer> flatStream = map.entrySet().stream()
.flatMap(entry -> entry.getValue().stream());
总之,flatMap
可以用于任何实现了 Streamable
接口的数据结构,例如 List
、Set
、Map
等。它主要用于将多个流合并成一个流,并将每个流中的元素转换成另一种形式。