获取具有 Scala 序列中字段的最大值的对象



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)
def maxCycle(xs: Seq[Cycle]): Cycle = {
xs.map(a => (a, a.cycleNumber.getOrElse(0))).maxBy(_._2)._1
}

一个简单的实现:

  1. 将 Seq[Cycle] 转换为 Seq[(Cycle, Int(] 每个元组的 ._1 是循环本身,._2 是它的循环数(如果没有,则为 0(
  2. 获取具有最大周期数的元组
  3. 返回该元组的第一个元素 (._1( 或循环自身

最新更新