我對使用Ordering
的Scala進行排序有點熟悉,但是我想排序一些在Java中定義的對象。他們Comparable
(不Comparable[T]
)和final
:對未綁定進行排序可比較的斯卡拉
final class Term implements Comparable { ... }
(這實際上是Lucene的期限類,並沒有我不能改變的Lucene的版本)。
我第一次希望有一個隱含的地方:
terms.sorted //fail - no implicit ordering
所以也許我可以使它有序?
class OrderedTerm extends Term with Ordering[Term] //fail - class is final
在此之後我想我會訴諸使用java.util.Collections.sort
的污穢:
Collections.sort(terms) // error: inferred type arguments [org.apache.lucene.index.Term] do not conform to method sort's type parameter bounds [T <: java.lang.Comparable[_ >: T]]
如此看來,即使這是行不通的Scala是嚴格與它的類型參數。在這一點上,我可以看到兩種方法:重新實現另一個顯式排序(壞)或在Java中編寫排序(並不差)。
有沒有辦法在Scala中乾淨地做到這一點?我認爲使用遺留Java對象這種情況可能很常見?
是的,你是完全正確的,我搞砸了OrderedTerm定義 - 我的意思是'有序'而不是'排序'。 我正在避免你的解決方案,因爲我認爲我不得不重新實現實際的排序方法,但我不: 隱式對象TermOrdering extends Ordering [Term] { def compare(t1:Term,t2:Term ):Int = t1.compareTo(t2) } – jpg
啊,的確,我錯過了那一點。 –