排序不适用于SortedSet

时间:2016-09-06 22:44:39

标签: scala

我有以下类定义的顺序:

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)

为什么订单不受尊重?

1 个答案:

答案 0 :(得分:1)

受到尊重。 min使用您提供的对象的默认顺序,并向后排序(that compare this而非this compare that - 您是否打算这样做或者这是错误的?)。 min并非特定于已排序的集合 - 它将适用于任何事物。

如果您想使用提供的订单,请使用headSortedSet的全部内容是它将元素从最小到最大排序。与min不同,head会检查所有内容,min只会获得已经排序到前面的内容。

headSortedSetC:\Program Files\Git\bin上不一定相同有点不直观,不可否认,但至少有一些理由可以解释原因。