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))