flatMap
是 Java 8 中引入的一個新特性,它屬于 java.util.stream
包。flatMap
是一個終端操作,用于將多個流合并為一個流,并將每個流中的元素轉換為另一種形式的元素。flatMap
的主要作用是將嵌套的流結構扁平化為一個流結構。
以下是 flatMap
與其他映射方法(如 map
和 filter
)的區別:
map
:map
是一個中間操作,它將流中的每個元素轉換為另一種形式的元素。map
不會改變流的結構,只是對每個元素進行轉換。例如,你可以使用 map
將整數流轉換為它們的平方值流。List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
Stream<Integer> squaredNumbers = numbers.stream().map(x -> x * x);
filter
:filter
也是一個中間操作,它根據給定的謂詞(即布爾函數)從流中篩選出滿足條件的元素。filter
不會改變流的結構,只是對元素進行篩選。例如,你可以使用 filter
從整數流中篩選出偶數。List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
Stream<Integer> evenNumbers = numbers.stream().filter(x -> x % 2 == 0);
flatMap
:flatMap
是一個終端操作,它將多個流合并為一個流,并將每個流中的元素轉換為另一種形式的元素。flatMap
會改變流的結構,因為它將嵌套的流結構扁平化為一個流結構。例如,你可以使用 flatMap
將嵌套的整數列表流扁平化為一個整數流。List<List<Integer>> nestedLists = Arrays.asList(
Arrays.asList(1, 2, 3),
Arrays.asList(4, 5, 6),
Arrays.asList(7, 8, 9)
);
Stream<Integer> flattenedStream = nestedLists.stream().flatMap(list -> list.stream());
總結一下,map
和 filter
是中間操作,它們不會改變流的結構,只是對元素進行轉換和篩選。而 flatMap
是一個終端操作,它會改變流的結構,將嵌套的流結構扁平化為一個流結構。