如何编写一个比较器来比较对象集合中的 2 个不同字段?

How do I write a comparator that compares 2 different fields in a collection of objects?

我下面的比较函数生成异常 Comparison method violates its general contract IllegalArgumentException。它在哪里以及什么合同失败了?

def compare(self: A, that: A): Int = {

  val xComp = self.x.compareTo(that.x)
   if (xComp == 0) {
    val yzComp = self.y.compareTo(that.z)
     if ( yzComp <= 0) {
      -1 
    } else {
      1 
    }
  } else {
    xComp
  }
}

即使不考虑在 self.y == that.z.

时不返回 0,也无法使用该约束创建有效的比较器

最值得注意的是,Comparator 需要施加总顺序,这特别意味着如果 compare(a, b) < 0,则 compare(b, a) > 0。如果 a(0, 1, 0) 并且 b(0, 0, 1).

,这对于您的比较器来说是微不足道的错误

不能 有一个 Comparator 比较 self.ythat.z 通常适用于排序和 TreeSet.