Ich habe eine Liste zu reduzieren:schnellste Weg, um eine Liste von Objekten
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)
Ich möchte reduzieren die oben aufgeführte Liste auf Namen und das Land basiert, so dass der Ausgang
wirdPerson("gin", 300, 3, "Ind")
Person("gin", 50, 1, "US")
Person("bin", 10, 0, "US")
Person("bin", 20, 2, "UK")
Person("bin", 30, 5, "Ind")
Meine Lösung zu diesem ist:
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)
}
Gibt es eine effizientere Lösung für das oben genannte Problem?
Sie Personen ohne Doppelkarte (..) auf gruppierte Sammlung in einem Rutsch könnte erhalten – Nyavro
Können Sie mir zeigen, wie? Danke – binshi