У меня есть список:Самый быстрый способ сократить список объектов
case class Person(name:String, salary:Int, cars:Int, country:String)
val a = Person("gin", 100, 2, "Ind")
val b = Person("gin", 200, 1, "Ind")
val c = Person("gin", 50, 1, "US")
val d = Person("bin", 10, 0, "US")
val e = Person("bin", 20, 2, "UK")
val f = Person("bin", 30, 5, "Ind")
val list = List(a, b, c, d, e, f)
Я хотел бы уменьшить приведенный выше список на основе имени и страны, поэтому выход будет
Person("gin", 300, 3, "Ind")
Person("gin", 50, 1, "US")
Person("bin", 10, 0, "US")
Person("bin", 20, 2, "UK")
Person("bin", 30, 5, "Ind")
Мое решение это:
listBuffer.groupBy(p => p.name -> p.country).map {
case (key, persons) => key -> (persons.map(_.salary).sum, persons.map(_.cars).sum)
}.map {
case ((name, coutry), (ss, cs)) => Person(name, ss, cs, coutry)
}
Есть ли более эффективное решение вышеуказанной проблемы?
Вы можете получить человек за один раз без двойной карты (..) на сгруппированных коллекции – Nyavro
Можете ли вы показать мне, как? Спасибо – binshi