2016-07-19 78 views
0

我有這樣的對象:獲取選項根據對象的值

case class Student(name: String, dateTime: DateTime) 

在這個函數中,我得到學生objectDateTime有時null有時不是:

def foo(student: Student): Unit = { 

} 

這是新的功能得到Option[DateTime]

def foo2(option: Option[DateTime]): Unit = { 

} 

因此,當致電foo2我需要先檢查我的DateTime是否爲null,然後致電foo2(None)DateTime不是null並致電Some(student)

所以我的問題是:如果不是使用此:

def foo(student: Student): Unit = { 

    if (student == null) foo2(None) 
    else foo2(Some(student)) 
} 

任何想法如何確定student值,並將其發送給foo2功能,而無需使用if-else

回答

4

更改課程結構,以反映空的性質:

case class Student(name: String, dateTime: Option[DateTime]) 

object Student{ 
    def apply(name: String, dateTime: DateTime) = new Student(name, Option(dateTime)) 
} 

默認的Optionapply將處理轉換nullNone

0

你寫在foo上的內容可以縮短爲foo2(Option(student))。 但它可能並非您真正想要的,因爲您的foo2接受DateTime的選項,而不是Student

所以,我猜測,你正在嘗試做的是:

foo2(Option(student).flatMap(s => Option(s.dateTime)) 

更重要的是,作爲答案提示,使dateTime可選在Student開始。