簡體   English   中英

如何編寫比較對象集合中的 2 個不同字段的比較器?

[英]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.ythat.z的比較器,它通常適用於排序和TreeSet之類的事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM