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