2016-09-06 4 views
0
에 보유하지 않습니다

I이 정의 된 순서 다음과 같은 클래스 : 그러나주문이 SortedSet의

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

: 나는 같은 순서를 정의 Offer의 SortedSet의를 선언

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

    def compare(that: Offer) = that.interestRate.compareTo(this.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은 정렬 된 모음에만 해당되는 것이 아니며 모든 항목에서 작동합니다.

제공된 주문을 사용하려면 head : SortedSet의 전체 요점은 요소가 최소에서 최대로 정렬된다는 것입니다. 그리고 확실한 모든 것을 확인하는 min과 달리 head은 이미 앞에 정렬 된 것을 가져옵니다. minhead 반드시 SortedSet에 동일하지 않습니다 그건

시피, 약간의 비 직관적이지만, 정당성의 적어도 비트가 왜 거기에있다.