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
等。它主要用于將多個流合并成一個流,并將每個流中的元素轉換成另一種形式。