Попробуйте foldLeft
вот так
case class MyObject(a: Int, b: Int)
val l = List(MyObject(1,2), MyObject(1,2))
l.foldLeft(MyObject(0,0)) { (acc, o) => MyObject(acc.a + o.a, acc.b + o.b) }
или короче reduce
l.reduce { (acc, o) => MyObject(acc.a + o.a, acc.b + o.b) }
или определите MyObject
добавление как инфиксный оператор
implicit class MyObjectAddition(x: MyObject) {
def + (y: MyObject): MyObject = MyObject(x.a + y.a, x.b + y.b)
}
а затем просто reduce
с
l.reduce(_ + _)
или определите Semigroup
для MyObject
import cats.Semigroup
implicit val intAdditionSemigroup: Semigroup[MyObject] =
(x: MyObject, y: MyObject) => MyObject(x.a + y.a, x.b + y.b)
и уменьшите с помощью
import cats.syntax.semigroup._
l.reduce(_ |+| _)
Все параметры вывода
res0: MyObject = MyObject(2,4)