Scala:获取列表中最后一个对象的id属性,如果列表为空,则获取None
假设我有一个MyObject的列表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:
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;对我有用。(请参阅更新。)注意:空的列表必须是正确的类型。