flatMap
是 Java 8 中引入的一個新特性,它屬于 java.util.stream
包。flatMap
是一個終端操作,用于將多個流合并為一個流,并將每個流中的元素轉換為另一種形式的元素。與其他集合操作相比,flatMap
的不同之處在于它的處理方式和結果類型。
以下是 flatMap
與其他集合操作的不同之處:
處理方式:flatMap
將多個流中的元素按照某種規則(通常是映射函數)轉換為新的元素,并將這些新元素合并成一個新的流。而其他集合操作(如 map
、filter
等)通常是在單個流上操作,不會創建新的流。
結果類型:flatMap
的結果類型通常是一個流,因為它的目的是將多個流合并為一個流。而其他集合操作的結果類型可能是集合(如 List
、Set
等),因為它們通常用于對單個流中的元素進行轉換和過濾。
并行處理:flatMap
支持并行處理,可以充分利用多核處理器的優勢。當使用 parallelStream
時,flatMap
會將多個流分成多個子流,并在不同的線程上并行處理這些子流。而其他集合操作通常只能在單個線程上執行。
舉個例子,假設我們有一個 List<List<String>>
,我們可以使用 flatMap
將所有子列表中的字符串連接成一個字符串列表:
List<List<String>> listOfLists = Arrays.asList(
Arrays.asList("a", "b"),
Arrays.asList("c", "d"),
Arrays.asList("e", "f")
);
List<String> flattenedList = listOfLists.stream()
.flatMap(list -> list.stream())
.collect(Collectors.toList());
System.out.println(flattenedList); // 輸出:[a, b, c, d, e, f]
在這個例子中,flatMap
將多個子列表中的字符串連接成一個字符串列表,這是與其他集合操作的主要區別。