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