Рассмотрим этот класс:
case class Person(val firstName: String, val lastName: String, age: Int)
val persons = Person("Jane", "Doe", 42) :: Person("John", "Doe", 45) ::
Person("Joe", "Doe", 43) :: Person("Doug", "Don", 65) ::
Person("Darius", "Don", 24) :: Person("Dora", "Don", 20) ::
Person("Dane", "Dons", 29) :: Nil
Чтобы получить Сумма возраста всех людей, я могу написать такой код:
persons.foldLeft(0)(_ + _.age)
Но если я хочу использовать sum
, мне нужно сначала сопоставить значение, и код будет выглядеть следующим образом:
persons.map(_.age).sum
Как можно Я использую метод sum
без создания некоторой промежуточной коллекции?
(Я знаю, что такая «оптимизация», скорее всего, не имеет реальной разницы в производительности, если она не выполняется в плотный цикл, и я также знаю о ленивых просмотрах и т. д.)
Возможно ли, чтобы код вроде
persons.sum(_.age)
выполнял то же самое, что и foldLeft
/ reduceLeft
?