scala - 在 Scala Seq 中获取具有字段最大值的对象
问题描述
Cycle 是一个对象,它有一个名为 cycleNumber 的字段,我想从该字段中获取具有最大 cycleNumber 的 Cycle 对象。为此,我正在尝试:
def maxCycle(xs: Seq[Cycle]): Cycle = xs match {
/*this means xs CAN NOT BE EMPTY*/
case Seq(x: Cycle) => x
case x :: y :: rest => maxCycle( (if (x.cycleNumber.getOrElse(0) > y.cycleNumber.getOrElse(0)) x else y ) :: rest )
但是,我遇到了匹配错误,我相信这是对最新命令的尊重,因为相应的表有 2 行用于 Cycle 对象。
有什么建议么?
解决方案
如果您想从 Seq 中获取最大值,您可以使用 sortBy、maxBy、reduce 或 fold
case class Cycle(cycleNumber:Option[Int])
val cycles = Seq(Cycle(Option(4)), Cycle(Option(1)), Cycle(Option(8)), Cycle(Option(8)))
// sortBy + lastOption because max fails if seq is empty
val max = cycles.sortBy(_.cycleNumber).lastOption
// reduceOption if seq is empty
vao max2 = cycles.reduceOption { (a, b) => if(a.cycleNumber.getOrElse(0) > b.cycleNumber.getOrElse(0)) a else b }
// or if seq is not empty
val max3 = cycles.maxBy(_.cycleNumber)
推荐阅读
- c++ - 非抽象但无状态的类对于多重继承是否与纯抽象类一样安全?
- javascript - 我可以使用javascript将数据插入数据库吗?
- python - 了解模块和绝对/相对包导入
- abap - 检测报告是否为 SAP 查询
- android - 如何在设计编辑器预览的工具栏中显示返回箭头?
- c# - .NET Core - UniTest 项目的 Nuget 包显示警告“程序集不在 'lib' 文件夹内”
- ios - 从数组中删除匹配的条目
- scala - 如何在scala中将多个TIFF组合成一个大的Geotiff?
- ruby-on-rails - 在 Rails 中加载嵌套资源的正确方法
- python - 绘图中线条颜色的条件格式