3 回答

TA貢獻1821條經驗 獲得超6個贊
雙方map
并flatMap
可以應用到Stream<T>
他們都返回Stream<R>
。不同之處在于map
操作為每個輸入值生成一個輸出值,而flatMap
操作為每個輸入值生成任意數量(零個或多個)值。
這反映在每個操作的參數中。
該map
操作采用a Function
,為輸入流中的每個值調用,并生成一個結果值,該值將發送到輸出流。
該flatMap
操作采用概念上想要消耗一個值并產生任意數量的值的函數。但是,在Java中,返回任意數量的值的方法很麻煩,因為方法只能返回零或一個值??梢韵胂笠粋€API,其中mapper函數flatMap
獲取值并返回數組或aList
值,然后發送到輸出。鑒于這是流庫,一種表示任意數量的返回值的特別方法是mapper函數本身返回一個流!映射器返回的流中的值將從流中排出并傳遞到輸出流。每次調用mapper函數返回的值的“叢”在輸出流中根本不被區分,因此輸出被稱為“扁平化”。
典型用途是用于映射函數的flatMap
返回Stream.empty()
,如果要發送零個值,或者類似的東西Stream.of(a, b, c)
,如果要返回幾個值。但是當然可以返回任何流。

TA貢獻1946條經驗 獲得超4個贊
Stream.flatMap
,因為它的名字可以猜到,是一個map
和一個flat
操作的組合。這意味著您首先將一個函數應用于元素,然后將其展平。Stream.map
僅在不對流進行展平的情況下將函數應用于流。
要了解流的扁平化,請考慮[ [1,2,3],[4,5,6],[7,8,9] ]
具有“兩個級別”的結構。扁平化這意味著將其轉換為“一級”結構:[ 1,2,3,4,5,6,7,8,9 ]
。
添加回答
舉報