【发布时间】:2011-06-29 17:34:32
【问题描述】:
假设我有一个名字列表。
case class Name(val first: String, val last: String)
val names = Name("c", "B") :: Name("b", "a") :: Name("a", "B") :: Nil
如果我现在想按姓氏对列表进行排序(如果这还不够,则按名字),这很容易做到。
names.sortBy(n => (n.last, n.first))
// List[Name] = List(Name(a,B), Name(c,B), Name(b,a))
但是,如果我想根据字符串的其他排序规则对该列表进行排序呢?
很遗憾,以下方法不起作用:
val o = new Ordering[String]{ def compare(x: String, y: String) = collator.compare(x, y) }
names.sortBy(n => (n.last, n.first))(o)
// error: type mismatch;
// found : java.lang.Object with Ordering[String]
// required: Ordering[(String, String)]
// names.sortBy(n => (n.last, n.first))(o)
有什么方法可以让我更改排序,而无需编写具有多个 if–else 分支的显式 sortWith 方法来处理所有情况?
【问题讨论】: