首页 > 解决方案 > Scala - 在自定义对象列表中查找最大值和值的总和

问题描述

我有一个简单的案例类:

case class Task (
  val name: String,
  val value: Option[Int],
  val description: String
)

我有这些对象的列表,其中name可能是多次。我想找到最大value相同的相同对象name并将这些值相加。

但是我有一个问题,因为我不确定如何找到最大值Options。如果他们没有怎么办?最简单的方法是什么?我试过类似的东西:

val max = list.filter(_.name == "Homework").reduceLeft(_.value max _.value).get

但它没有用,因为如果有些value是无,那么我得到了错误。

标签: scala

解决方案


如果您使用的是 Scala 2.13.x,那么您可以使用groupMapReduce().

val maxAndSumByName: Map[String,(Int,Int)] =
  tasks.groupMapReduce(_.name
                      )(_.value.fold(Int.MinValue,0)(n=>(n,n))
                       ){case ((ax,as),(bx,bs)) =>
                          (ax max bx, as+bs)
                        }

元组中的第一个Int是最大值,第二个Int是总和。


推荐阅读