Scala: как посчитать, сколько раз удалась будущая пара

В следующем фрагменте кода вызывается 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)? Количество должно быть увеличено, если и только для обоих Futureс успехом.

1 ответ

Решение

Как насчет возвращения Tuple2 в вашем fold который содержит сумму и количество:

amounts.foldLeft((0d, 0))
  ((accum, amount) => (accum._1 + (amount._2 * rates(amount._1)),accum._2 + 1))
Другие вопросы по тегам