如何编写一个比较器来比较对象集合中的 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.y
和 that.z
通常适用于排序和 TreeSet
.
我下面的比较函数生成异常 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
.
最值得注意的是,Comparator
需要施加总顺序,这特别意味着如果 compare(a, b) < 0
,则 compare(b, a) > 0
。如果 a
是 (0, 1, 0)
并且 b
是 (0, 0, 1)
.
你 不能 有一个 Comparator
比较 self.y
和 that.z
通常适用于排序和 TreeSet
.