scala - 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 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
是总和。
推荐阅读
- yaml - 从 yaml 文件创建公共和私有 Open API 文档
- c# - 如何使用数据库中的列但没有完整的过滤器参数来过滤表单视图
- sap - Hybris 6.7系统更新时间
- r - 在整数向量中包含对数值
- android - android.view.InflateException: Binary XML file line #6: Error inflating class。在我的包中,我做了这个类,但仍然出现错误
- excel - Excel vlookup/Macro 计算贸易数据
- sql-server - 如何制作一个按某些条件过滤所有记录的存储过程
- android - 可以控制整个应用程序的超级活动控制器
- javascript - 如何检查所有行的字段是否为空?
- angular - 错误类型错误:无法读取未定义打字稿的属性“过滤器”