2014-02-21 70 views
0

我喜歡這樣一個事實,即無需我的介入即可自動進行平面圖的跳過「選項」在我得到的結果數組中。如何從flatmap中的EmptyHouse中受益?

不過我也喜歡像

「房子」創建類的空實現 「EmptyHouse」 「BeautifulHouse」

有沒有辦法讓flatmap知道要忽略「EmptyHouse」只是因爲它會忽略'選項'?每次我打電話給'flatMap'時都沒有代碼重寫?

回答

5

調用flatMap(或只是flatten)上的一個Option集合將確實刪除任何發生None。 這是沒有魔力的,它僅僅是因爲Option可以被視爲零(None)或1(Some) 元素的Iterable(感謝Option.option2Iterable)。 因此,你可能只是做同樣的用自己的類:

class House 
object EmptyHouse extends House 
object BeautifulHouse extends House 

implicit def houseToIterable(house: House) = { 
    if (house == EmptyHouse) Iterable.empty[House] else Iterable(house) 
} 

強制性REPL測試:

scala> val list = List(new House, EmptyHouse, BeautifulHouse) 
list: List[House] = List([email protected], [email protected], [email protected]) 
scala> list.flatten 
res1: List[House] = List([email protected], [email protected]) 

現在,我不一定會推薦這個。除非你的班級(與你的House班不同) 確實代表某種集合,隱含地將其轉換爲Iterable真的感覺像是一種濫用。特別是當你可以輕鬆做到這些時:

list.filter(house != EmptyHouse) 
相關問題