У меня есть набор объектов
case class Record(value: Whatever)
val list: List[Record]
и я хочу выбрать лучший по рейтингу
list.foldLeft(list.head) { (best, current) =>
if (rank(current.value) > rank(best.value)) {
current
} else {
best
}
}
Предположим, что rank
дорого стоит и лучше не вызывать дважды на тот же объект. Какие у меня варианты?
Я могу свернуть до кортежа (rank, record)
, но это, вероятно, означает создание вспомогательных объектов во время итерации. Стоит ли беспокоиться о накладных расходах? Или, скорее,
Как это может быть эффективно реализовано в Scala?
Каков правильный «функциональный» взгляд на проблему?