[英]How do I write a comparator that compares 2 different fields in a collection of objects?
我下面的比較 function 生成一個異常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
之類的事情。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.