與Java的compareTo()和Collections.sort()行爲有些混淆。compareTo()和Collections.sort()解決方案多列排序(升序)問題
我應該使用compareTo()& Collections.sort()以升序對列進行排序。
我的標準是(如果出現相同的數字,請對下一個可用列進行排序)。
(1)文件號 (2)過帳日期 (3)交易日期 (4)交易參考編號比較
下面的代碼(其在呼叫方法執行)實現該集合。 sort()方法:
public int compareTo(CreditCardTransactionDetail t) {
int comparison = 0;
int documentNumberComparison = this.getDocumentNumber().compareTo(t.getDocumentNumber());
if (documentNumberComparison != 0) {
comparison = documentNumberComparison;
}
else {
int postingDateComparison = this.getTransactionPostingDate().compareTo(t.getTransactionPostingDate());
if (postingDateComparison != 0) {
comparison = postingDateComparison;
}
else {
int transactionDateComparison = this.getTransactionDate().compareTo(t.getTransactionDate());
if (transactionDateComparison != 0) {
comparison = transactionDateComparison;
}
else {
int transactionRefNumberComparison = this.getTransactionReferenceNumber().compareTo(t.getTransactionReferenceNumber());
LOG.info("\n\n\t\ttransactionRefNumberComparison = " + transactionRefNumberComparison + "\n\n");
if (transactionRefNumberComparison != 0) {
comparison = transactionRefNumberComparison;
}
}
}
return comparison;
}
問題(S):
(1)我做了正確的事情?當比較= 0時,它返回爲-2。這是正確的行爲,因爲我一直認爲它在-1,0,1之間。
(2)我應該使用比較器嗎?
快樂編程...
寫了4個比較似乎浪費,除非你確實需要能夠比較所有4分不同的方式。如果你這樣做,那麼將它們與「複合」相結合是很好的...如果不是這樣,比較鏈是真正實現番石榴最好的方法。 – ColinD 2011-04-18 04:15:11
@ColinD:完全同意! – 2011-04-18 04:22:29