입니다. 현재 내 compareTo
방법은 다음과 같습니다compareTo와 내가 POJO이처럼 보이는이 이적
@Override
public int compareTo(EfdisJournal other) {
int i = this.type.compareTo(other.type);
if (i != 0)
return i;
if (this.bookingDate != null && other.bookingDate != null)
i = this.bookingDate.compareTo(other.bookingDate);
if (i != 0)
return i;
if (this.journalId != null && other.journalId != null)
i = this.journalId.compareTo(other.journalId);
if (i != 0)
return i;
return this.account.compareTo(other.account);
}
나는이 compareTo
방법으로 정렬을 실행하면,이 java.lang.IllegalArgumentException: Comparison method violates its general contract
오류가 발생합니다. 나는 약간의 구글을했다. 그리고 나는 필드의 약간이 비교 위에서 null
이기 때문에 그것이 일어난다라고 생각한다. 그러나이 문제를 어떻게 해결해야하는지, 또는 내가 왜 그런 오류가 나타나는 지 알지 못한다.
비교는 다음과 같이 작동합니다 : 3이 journalId
에 의해 account
에 의해 비교 마지막에 비교으로 1 일, 다음 bookingDate
에 의해 비교, type
으로 비교합니다. 모든 비교는 오름차순이어야합니다.
type
는bookingDate
는journalId
는account
결코 널 (null의 경우도있다) null의 경우 null는
편집 :
슬프게도 나는이 메소드를 구현할 수 없어서 순서가 필요에 따라 이루어졌다. 저장 프로 시저가 결과 집합을 2 개 생성 했으므로 문제를 해결했습니다. 두 번째 결과 집합은 필요에 따라 순서가 지정되었으므로 수행해야하는 유일한 작업은 첫 번째 결과 집합 대신 두 번째 결과 집합을 사용하는 것이 었습니다.
어떻게 널 필드를 기준으로 요소를 주문 하시겠습니까? – Pshemo
'null'bookingDate가있는 것들이 null이 아닌 bookingDate가있는 _before_ 또는 _after_ 가지를 정렬하고 'compareTo'를 적절하게 작성해야하는지 결정해야합니다. (그리고 나서'journalId'도 마찬가지입니다.) 그러면 순서대로 합의 할 수 있습니다. – khelwood
'bookingdate'가 null 인 경우,'journalId'에 의해 비교되고, 또한 thatsn이 NULL이면,'account'와 비교해야합니다. 결과가 어떻게 나타나는지 업데이트 드리겠습니다. – XtremeBaumer