【发布时间】:2016-07-18 17:34:56
【问题描述】:
我想根据成员的值对 A 类的对象进行排序:a、b、c:A 是最优先的 -> b 是下一个 - > c 的偏好最少。
比较器用于:
x = x.sortWith(comparator)
这里,x 是一个 ArrayBuffer[A]
class A {var a,b,c = 0}
def comparator(f1:A, f2:A) = {
if(f1.a == f2.a) {
if(f1.b == f2.b) f1.c > f2.c
else f1.b > f2.b
}
else f1.a > f2.a
}
使用这个我得到:
**java.lang.IllegalArgumentException: Comparison method violates its general contract!**
at java.util.TimSort.mergeLo(TimSort.java:747)
at java.util.TimSort.mergeAt(TimSort.java:483)
at java.util.TimSort.mergeCollapse(TimSort.java:410)
at java.util.TimSort.sort(TimSort.java:214)
at java.util.TimSort.sort(TimSort.java:173)
at java.util.Arrays.sort(Arrays.java:659)
at scala.collection.SeqLike$class.sorted(SeqLike.scala:618)
at scala.collection.AbstractSeq.sorted(Seq.scala:41)
at scala.collection.SeqLike$class.sortWith(SeqLike.scala:575)
at scala.collection.AbstractSeq.sortWith(Seq.scala:41)
【问题讨论】:
-
你返回
boolean结果,但它应该是int -
使用我得到一个错误:错误:(124、58)类型不匹配;找到:需要 Int:布尔值
-
你如何使用你的
comparator?你能发布更多代码吗? -
当然!这里,x 是一个 ArrayBuffer[A]
x = x.sortWith(comparator)
标签: java scala sorting illegalargumentexception