このクラスを検討してください。
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
する?