Scala:获取列表中最后一个对象的id属性,如果列表为空,则获取None

Scala:获取列表中最后一个对象的id属性,如果列表为空,则获取None,scala,Scala,假设我有一个MyObject的列表 case class myObject(id:Int) val myObjects = List(myObjects(5), myObjects(4)) 我需要获取类型选项[String] 我可以使用 val lastId: Option[String] = Some(myObjects.last.id.toString) 那 这一切都很好,但问题是,如果列表为空,我需要它来工作。在这种情况下,我需要lastId到None 我试过了 val lastId:

假设我有一个MyObject的列表

case class myObject(id:Int)
val myObjects = List(myObjects(5), myObjects(4))
我需要获取类型
选项[String]

我可以使用

val lastId: Option[String] = Some(myObjects.last.id.toString)
那 这一切都很好,但问题是,如果列表为空,我需要它来工作。在这种情况下,我需要
lastId
None

我试过了

val lastId: Option[String] = myObjects.lastOption.map(_.id.toString).getOrElse(None)
val lastId: Option[String] = myObjects.lastOption.map(_.id.toString.getOrElse(None))
它有几个变体,但不能同时适用于包含对象的列表和空列表

最好的方法是什么

myObjects.lastOption.map(_.id.toString)
测试:

List(myObject(5), myObject(4)).lastOption.map(_.id.toString)
//res0: Option[String] = Some(4)

List.empty[myObject].lastOption.map(_.id.toString)
//res1: Option[String] = None

只需从第三个选项中删除
getorelse(None)
,让类型引导您。另外,您似乎不了解Option和
map
是如何工作的,因此最好对它们进行更多的研究。您正在尝试完成Scala库已经为您完成的工作。查看LastOption的代码。对于空列表,这似乎不起作用。当我尝试这样做时,我得到一个错误,“error:value id不是Nothing的成员”@quantumbutterfly;对我有用。(请参阅更新。)注意:空的
列表必须是正确的类型。