【问题标题】:Scala: How to count how many times a Future pair succededScala:如何计算 Future 对成功的次数
【发布时间】:2023-12-01 13:33:01
【问题描述】:

在以下代码中,sn-p 调用getAmounts 以获取按货币分组的一些金额,然后调用getRates 以应用相应的汇率:

def getAmounts = Future(Map("EUR" -> 500d, "USD" -> 400d))
def getRates = Future(Map("EUR" -> 1d, "USD" -> 0.9))

getAmounts.flatMap { amounts =>
  getRates.map { rates =>
    amounts.foldLeft(0d)((total, amount) => total + (amount._2 * rates(amount._1)))
  }
}.map { println(_) }

这是输出 (500.0 * 1 + 400 * 0.9):

860.0

如何获得已处理的金额(在本例中为 2)?当且仅当Futures 都成功时,计数应该增加。

【问题讨论】:

    标签: scala future


    【解决方案1】:

    在您的fold 中返回一个包含总数和计数的Tuple2 怎么样:

    amounts.foldLeft((0d, 0))
      ((accum, amount) => (accum._1 + (amount._2 * rates(amount._1)),accum._2 + 1))
    

    【讨论】: