0
我喜歡這樣一個事實,即無需我的介入即可自動進行平面圖的跳過「選項」在我得到的結果數組中。如何從flatmap中的EmptyHouse中受益?
不過我也喜歡像
「房子」創建類的空實現 「EmptyHouse」 「BeautifulHouse」
有沒有辦法讓flatmap知道要忽略「EmptyHouse」只是因爲它會忽略'選項'?每次我打電話給'flatMap'時都沒有代碼重寫?
我喜歡這樣一個事實,即無需我的介入即可自動進行平面圖的跳過「選項」在我得到的結果數組中。如何從flatmap中的EmptyHouse中受益?
不過我也喜歡像
「房子」創建類的空實現 「EmptyHouse」 「BeautifulHouse」
有沒有辦法讓flatmap知道要忽略「EmptyHouse」只是因爲它會忽略'選項'?每次我打電話給'flatMap'時都沒有代碼重寫?
調用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)