我有一個POJO看起來像這樣:的CompareTo是傳遞
public class Pojo implements Comparable<Pojo> {
private String type;
private String journalId;
private Date bookingDate;
private Long account;
private String description;
private BigDecimal debit;
private BigDecimal credit;
....
}
,我想排序這些POJO的列表。目前我compareTo
方法是這樣的:
@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
比較。但我不知道如何解決這個問題,或者如果我是正確的,爲什麼會出現這個錯誤。
的比較應該像這樣工作:1通過type
比較,然後通過bookingDate
比較,爲第13由journalId
,最後由account
比較比較。所有的比較應該是遞增的。
type
永遠不能爲nullbookingDate
可以爲空journalId
可以爲空account
永遠不能爲null
編輯:
可悲的是我無法實現該方法,因此該命令是根據需要的。然而,我解決了我的問題,因爲存儲過程產生了2個結果集,其中第二個是需要的順序,所以我唯一要做的就是使用第二個結果集而不是第一個結果集。
如何你想根據現場是空訂購的元素? – Pshemo
您應該決定是否應該使用'null' bookingDate對具有非null bookingDate的_before_或_after_事物進行排序,並適當編寫'compareTo'。 (然後'journalId'。)然後你可以得到一個順序排序的訂單。 – khelwood
如果'bookingdate'爲null,那麼它應該通過'journalId'進行比較,如果它們爲null,那麼它應該比較'account'。我會更新結果應該如何看起來像 – XtremeBaumer