有效计算平均价格的方法

时间:2015-08-10 20:44:25

标签: scala

我有以下功能来计算平均价格:

  def averagePrice(es: Stream[Order], t: Ric) = {
    val fes = es.filter(executions(_,t))
    if(fes.isEmpty) 0.0
    else fes.map(o => o.quantity * o.price).sum / fes.map(o => o.quantity).sum
  }

正如您所看到的,else条件必须经过两次流:一次获得总费用,一次获得总费用。有没有办法通过流一次来计算平均价格?

2 个答案:

答案 0 :(得分:7)

迭代过流并同时收集价格和数量:

val (t, q) = fes.foldLeft((0,0)){
    (total, item) => (total._1 + item.quantity*item.price, total._2 + item.quantity)
}

答案 1 :(得分:3)

您可以计算平均值"即时"

def averagePrice(es: Stream[Order], t: Ric): Double =
  val fes = es.filter(executions(_, t))
  fes.foldLeft((0, 0.0)) { case ((i, avg), o) =>
    (i + 1, avg + (o.price * o.quantity - avg) / (i + 1))
  }._2