2015-06-25 50 views
6

說我有下面的代碼使用多個地圖功能與在Java流

data.stream() 
    .map(x -> { 
     Object a = maybeReturnsNull(x); 
     return a == null ? defaultValue : a; 
    }) 

我有一些功能可能會返回null在地圖中的語句塊,而我把它應用到一個流的元素。然後我想確保將任何null結果改爲某個默認值。使用兩個映射之間是否存在顯着差異,如下例所示,與使用上一個定義輔助變量a並在lambda表達式中使用代碼塊的示例相比?

data.stream() 
    .map(x -> maybeReturnsNull(x)) 
    .map(x -> x == null ? defaultValue : x) 

是否有避免使用帶有lambda函數的塊語句的標準?

+1

或'.MAP(這:: maybeReturnsNull).MAP(可選:: ofNullable).MAP(鄰 - > o.orElse(默認值))' – assylias

+2

@assylias:即使它不在性能上有所不同,我認爲單個'.map(x - > Optional.ofNullable(maybeReturnsNull(x))。orElse(defaultValue))'應該優先於這裏的三個映射步驟。但是,這仍然是一個口味問題... – Holger

回答

7

兩者都很好。選擇一個看起來更具可讀性的人。如果計算自然分解,就像這樣做,那麼多個地圖可能更具可讀性。有些計算不會自然分解,在這種情況下,你會陷入前者。在任何情況下,你都不應該擔心其中一個比另一個更顯着。這在很大程度上是沒有考慮的。