2016-09-06 59 views
0

我有以下的類定義的排序:順序不持有的SortedSet

case class Offer(id: Int, amount: Int, interestRate: Double) extends Ordered[Offer] { 

    def compare(that: Offer) = that.interestRate.compareTo(this.interestRate) 

} 

我宣佈Offer如果SortedSet,在這裏我也定義相同的排序:

val currentOffers: SortedSet[Offer] = SortedSet.empty[Offer](Ordering[Double].on[Offer](_.interestRate)) 

然而,如果我加:

Offer(1, 5, 4.0) 
Offer(2, 5, 0.5) 
Offer(3, 5, 1.5) 

然後我用currentOffers.min提取最小的元素,I得到:

Offer(1, 5, 4.0) 

相反的:

Offer(2, 5, 0.5) 

爲什麼不排序尊重?

回答

1

它受到尊重。 min使用您提供的對象的默認排序,並且它向後排序(that compare this而不是this compare that - 您打算這麼做還是這是一個錯誤?)。 min不是特定於排序的集合 - 它可以處理任何事情。

如果您想使用提供的訂購,請使用headSortedSet的整個要點是它將元素從最小到最大排序。而不像min,這將檢查一切只是爲了確保,head只是得到了已經排序在前面的東西。

minhead不一定是相同的SortedSet是有點不直觀,誠然,但至少有一點理由爲什麼。