2016-09-06 30 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是有点不直观,诚然,但至少有一点理由为什么。