Ich glaube, es muss eine bessere Möglichkeit, diese Frage zu stellen, aber ich konnte nicht daran denken.Holen Sie sich den neuesten Standort vieler Benutzer
Betrachten Sie diese Fallklasse:
case class UserLocation(id: Int, dateTime: DateTime, lat: Double, lon: Double)
ich eine List[UserLocation]
mit der Geschichte aller Standorte aller Nutzer haben, und ich möchte diese Liste filtern, um nur die letzte Stelle von jedem von ihnen haben.
Hier ist, wie ich es tat:
implicit def dateTimeOrdering: Ordering[DateTime] = Ordering.fromLessThan(_ isAfter _)
val locations: List[UserLocation] = bigListOfUserLocations()
val groupedById = locations.groupBy(_.id)
val sortedByDate = groupedById.map(_._2.sortBy(_.dateTime))
val finalList = sortedByDate.map(_.head)
Dies funktioniert, aber was ich möchte, ist wissen, ob es ein besserer Weg, dies zu tun, die Leistung zu verbessern und/oder Lesbarkeit
WICHTIG: Dies ist meist eine akademische Frage, würde ich gerne die performatic oder idiomatische Art und Weise erreichen dies auf manipulierenden Listen, so Vorschläge wie "versuchen xyz auf der Datenbank, bevor Sie die Liste" wird nicht sein hilfreich
Oh, sehr interessant. Ich war mir dieser MaxBy-Methode nicht bewusst. Vielen Dank –
Seien Sie vorsichtig, da 'maxBy' eine Teilfunktion ist -' scala> Liste [(Int, Int)](). MaxBy (_._ 1) java.lang.UnsupportedOperationException: empty.maxBy' –