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

Scala中如何计算列表元素price与quantity乘积的总和?

在Scala中计算列表元素price与quantity乘积之和的实现思路

嘿,这个需求在Scala里其实有好几种简洁又实用的实现方式,咱先明确个前提:假设你的列表元素是一个定义好的样例类(Case Class),比如这样:

case class ServItem(price: Double, quantity: Int)
val lPserv: List[ServItem] = List(ServItem(15.99, 3), ServItem(9.99, 5))

下面给你梳理几个常用的实现思路:

  • 最简洁直观:map + sum组合
    先通过map把每个元素转换成price * quantity的结果,再直接调用sum方法求和,代码非常清爽:

    // 常规写法
    val total = lPserv.map(item => item.price * item.quantity).sum
    // 更简洁的下划线简写
    val total = lPserv.map(_.price * _.quantity).sum
    

    这种写法适合逻辑简单的场景,可读性拉满,新手也能一眼看懂。

  • 灵活可控:foldLeft累加
    如果你需要在累加过程中做额外的逻辑(比如过滤无效值、记录中间结果),foldLeft会是更好的选择。它从一个初始值开始,逐步迭代列表元素并更新累加值:

    val total = lPserv.foldLeft(0.0) { (accumulator, currentItem) =>
      accumulator + currentItem.price * currentItem.quantity
    }
    

    这里初始值用0.0是为了匹配Double类型的乘积结果,避免类型不兼容的问题。

  • 风格备选:for推导式
    如果你更习惯for循环的写法,也可以用for推导式先生成乘积列表,再求和:

    val total = (for (item <- lPserv) yield item.price * item.quantity).sum
    

    本质上和map+sum是一样的,只是写法风格不同,看个人偏好。

额外注意事项

如果你的price或quantity字段可能为空(比如用Option类型包装),那需要先处理空值情况,比如用getOrElse给默认值:

// 假设price是Option[Double]
case class ServItem(price: Option[Double], quantity: Int)
val total = lPserv.map(item => item.price.getOrElse(0.0) * item.quantity).sum

内容的提问来源于stack exchange,提问作者Jose Cabrera Zuniga

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 07:45:44