Scala 订购不需要';不要挂断分拣数据集
我有一个定义了顺序的类:Scala 订购不需要';不要挂断分拣数据集,scala,Scala,我有一个定义了顺序的类: case class Offer(id: Int, amount: Int, interestRate: Double) extends Ordered[Offer] { def compare(that: Offer) = that.interestRate.compareTo(this.interestRate) } val currentOffers: SortedSet[Offer] = SortedSet.empty[Offer](Orderin
case class Offer(id: Int, amount: Int, interestRate: Double) extends Ordered[Offer] {
def compare(that: Offer) = that.interestRate.compareTo(this.interestRate)
}
val currentOffers: SortedSet[Offer] = SortedSet.empty[Offer](Ordering[Double].on[Offer](_.interestRate))
我声明了一个SortedSet ofOffer
,其中我还定义了相同的排序:
case class Offer(id: Int, amount: Int, interestRate: Double) extends Ordered[Offer] {
def compare(that: Offer) = that.interestRate.compareTo(this.interestRate)
}
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)
为什么不尊重订单?尊重订单
min
使用您提供的对象的默认顺序,并且它向后排序(比较此
而不是此比较此
——这是您的意图还是错误?)min
不是特定于已排序集合的,它可以处理任何事情
如果要使用提供的排序,请使用head
:SortedSet
,它的全部要点是将元素从最小到最大排序。而不像min
,它会检查所有的东西,只是为了确定,head
只会得到已经排在前面的东西
诚然,min
和head
在SortedSet
上不一定是相同的,这有点不直观,但至少有一点理由解释为什么