我正在尝试将Ordering[T]
用于多种类型。
case class Person(name: String, age: Int)
Person("Alice", 20)
Person("Bob", 40)
Person("Charlie", 30)
object PersonOrdering extends Ordering[Person] {
def compare(a:Person, b:Person) =
a.age compare b.age
}
如何按姓名和年龄排序?
集合需要保持按更新排序。
答案 0 :(得分:7)
按名称和年龄的元组排序。
此外,通常更容易致电Ordering.by
而不是自己延长Ordering
。
case class Person(name: String, age: Int)
implicit val personOrdering: Ordering[Person] =
Ordering.by(p => (p.name, p.age))
Seq(Person("a", 2), Person("b", 1), Person("a", 1)).sorted
// Seq[Person] = List(Person(a,1), Person(a,2), Person(b,1))
答案 1 :(得分:3)
你可以制作一个元组并对其进行排序:
val people = List(
Person("Alice", 20),
Person("Bob", 40),
Person("Charlie", 30)
)
people.orderBy(x => (x.name,x.age))
如果扩展Ordering
应该是相同的,制作一个元组并进行比较