我有以下类定义的顺序:
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
提取最小的元素,我得到:
Offer(1, 5, 4.0)
而不是:
Offer(2, 5, 0.5)
为什么订单不受尊重?
答案 0 :(得分:1)
受到尊重。 min
使用您提供的对象的默认顺序,并向后排序(that compare this
而非this compare that
- 您是否打算这样做或者这是错误的?)。 min
并非特定于已排序的集合 - 它将适用于任何事物。
如果您想使用提供的订单,请使用head
:SortedSet
的全部内容是它将元素从最小到最大排序。与min
不同,head
会检查所有内容,min
只会获得已经排序到前面的内容。
head
和SortedSet
在C:\Program Files\Git\bin
上不一定相同有点不直观,不可否认,但至少有一些理由可以解释原因。