Java 8中map()和flatMap()方法區(qū)別詳解
java8中兩個常用方法
在Java 8中,map()和flatMap()是Stream API中的兩個常用方法,用于對流中的元素進行轉(zhuǎn)換操作。它們的主要區(qū)別在于它們的返回類型和轉(zhuǎn)換方式。
map()方法
- map()方法將流中的每個元素都映射到另一個對象。它接收一個函數(shù)作為參數(shù),該函數(shù)將當(dāng)前流中的每個元素轉(zhuǎn)換為另一個對象。
- map()方法的返回類型是一個新的Stream對象,其中包含了經(jīng)過映射后的元素。
- map()方法保留了流的結(jié)構(gòu),也就是說,原始流中的每個元素都會按照映射函數(shù)的規(guī)則進行轉(zhuǎn)換,并放入新的流中。
示例代碼:
List<String> names = Arrays.asList("Alice", "Bob", "Charlie"); List<Integer> nameLengths = names.stream() .map(name -> name.length()) .collect(Collectors.toList()); System.out.println(nameLengths); // 輸出:[5, 3, 7]
flatMap()方法
- flatMap()方法將流中的每個元素都轉(zhuǎn)換為包含零個或多個元素的流。它接收一個函數(shù)作為參數(shù),該函數(shù)將當(dāng)前流中的每個元素轉(zhuǎn)換為一個流。
- flatMap()方法的返回類型是一個新的Stream對象,其中包含了所有轉(zhuǎn)換后的元素。這些元素被合并成一個新的流。
- flatMap()方法將每個元素轉(zhuǎn)換為流后,會將所有的流合并為一個流,而不保留原始流的結(jié)構(gòu)。
示例代碼:
List<List<Integer>> numbers = Arrays.asList( Arrays.asList(1, 2, 3), Arrays.asList(4, 5, 6), Arrays.asList(7, 8, 9) ); List<Integer> allNumbers = numbers.stream() .flatMap(list -> list.stream()) .collect(Collectors.toList()); System.out.println(allNumbers); // 輸出:[1, 2, 3, 4, 5, 6, 7, 8, 9]
總結(jié)一下,map()方法用于映射每個元素到另一個對象,而flatMap()方法用于將每個元素轉(zhuǎn)換為一個流,并將所有轉(zhuǎn)換后的流合并成一個流。
以上就是Java 8中map()和flatMap()方法區(qū)別詳解的詳細內(nèi)容,更多關(guān)于Java8 map flatMap方法區(qū)別的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Java8深入學(xué)習(xí)系列(一)lambda表達式介紹
Java8最值得學(xué)習(xí)的特性就是Lambda表達式和Stream API,所以我們學(xué)習(xí)java8的第一課就是學(xué)習(xí)lambda表達式,下面這篇文章主要給大家介紹了關(guān)于Java8學(xué)習(xí)之lambda的相關(guān)資料,文中介紹的非常詳細,需要的朋友可以參考借鑒,下面來一起看看吧。2017-08-08一次由Lombok的@AllArgsConstructor注解引發(fā)的錯誤及解決
這篇文章主要介紹了一次由Lombok的@AllArgsConstructor注解引發(fā)的錯誤及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-09-09JVM---jstack分析Java線程CPU占用,線程死鎖的解決
這篇文章主要介紹了JVM---jstack分析Java線程CPU占用,線程死鎖的解決,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-09-09