Stream流中map與flatMap區別|轉
??map和flatMap都是對流中的每一個元素,執行入參中的函數式方法,只是在函數式方法的返回值上有區別:
- map中函數式方法返回值為對象,也就是原始流中有n個元素,處理之后的流中元素個數也是n。即使你在返回的時候返回了多個元素如數組,它也會把數組當成一個對象處理。
- flatMap中函數式方法返回值為流,flat為扁平的意思,也就是說,我們可以通過flatMap改變原始流中對象的個數,flatMap會將返回的流合并成一個流,而不是當成對象處理。
??通過一個簡單的例子來理解:假設有一個數組1,2,3,4,5,需要對其每個元素進行處理,當值為偶數時,則返回雙個,也就是結果為:1,2,2,3,4,4,5,這個時候就需要使用flatMap來處理。我們可以通過下面的示意圖及代碼體驗一下區別:

public class FlatMapTest {
public static void main(String[] args) {
List<Integer> nums = Arrays.asList(1, 2, 3, 4, 5);
List<Object> res1 = nums.stream().map(e -> {
if (e % 2 == 0) {
return Arrays.asList(e, e);
} else {
return e;
}
}).collect(Collectors.toList());
List<Object> res2 = nums.stream().flatMap(e -> {
if (e % 2 == 0) {
return Stream.of(e, e);
} else {
return Stream.of(e);
}
}).collect(Collectors.toList());
System.out.println(res1);
System.out.println(res2);
}
}
執行結果:
[1, [2, 2], 3, [4, 4], 5]
[1, 2, 2, 3, 4, 4, 5]
Reference
讀后有收獲,小禮物走一走,請作者喝咖啡。
Buy me a coffee. ?Get red packets.作者:樓蘭胡楊
本文版權歸作者和博客園共有,歡迎轉載,但請注明原文鏈接,并保留此段聲明,否則保留追究法律責任的權利。

浙公網安備 33010602011771號