Рассмотрим этот класс:
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
делает?