You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Scala中按键分组求和后如何返回List[InputRecord]而非元组列表

Scala分组求和返回指定样例类类型实现方案

错误原因

你之前的代码执行后得到的是Map[String, Long]类型的分组结果,调用toList后自然返回List[(String, Long)]类型的元组列表,和List[InputRecord]类型完全不匹配。
你尝试用asInstanceOf强转属于错误操作:该方法是不安全的运行期类型转换,你将集合类型强制转换为单个样例类类型,类型不兼容必然抛出类转换异常。

修复代码

你只需要在分组求和完成后,将得到的(费用描述, 总金额)元组手动映射为InputRecord实例即可:

case class InputRecord(FeeDescription: String, FeeAmount: Long)

val reconInput : List[InputRecord] = List(
  InputRecord("Visa Auth Fee", 30), 
  InputRecord("Visa Auth Fee", 40),
  InputRecord("Master Network Fee", 50)
)

val output: List[InputRecord] = reconInput
  .groupBy(_.FeeDescription)
  .mapValues(_.foldLeft(0L)(_ + _.FeeAmount))
  .map { case (feeDesc, totalAmount) => InputRecord(feeDesc, totalAmount) }
  .toList

执行结果

运行后得到的output值完全符合预期:

List(InputRecord("Visa Auth Fee", 70), InputRecord("Master Network Fee", 50))

优化建议

如果数据量较大,可以在groupBy之后加.view方法,可以避免生成中间Map集合,提升性能:

val output: List[InputRecord] = reconInput
  .groupBy(_.FeeDescription)
  .view
  .mapValues(_.foldLeft(0L)(_ + _.FeeAmount))
  .map { case (feeDesc, totalAmount) => InputRecord(feeDesc, totalAmount) }
  .toList

内容的提问来源于stack exchange,提问作者Sekar Ramu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 18:45:05