多列排序(升序)问题的compareTo()和Collections.sort()解决方案
|
与Java的compareTo()和Collections.sort()行为有些混淆。
我应该使用compareTo()和Collections.sort()以升序对列进行排序。
我的标准是(如果出现相同的数字,请排序下一个可用的列)。
(1)证件编号
(2)张贴日期
(3)交易日期
(4)交易参考号比较
这是实现Collection.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;
}
问题:
(1)我做对了吗?当比较= 0时,它返回-2。这是正确的行为,因为我一直认为它在-1,0,1之间。
(2)我应该使用比较器吗?
编程愉快...
没有找到相关结果
已邀请:
4 个回复
课刊灭似
变量。 如果您要实施
,则无需处理
。适用于需要比较不是2英镑的东西或需要以其他方式进行比较的情况。 Guava的ComparisonChain类使这样的
方法变得非常简单:
钨蜡唤喉晤
它使每个比较器解耦,很容易更改/添加/删除字段顺序。 编辑:请参阅ColinD的更轻的解决方案。
委婪绷冗诉
稳赣苍卯改
:
所以-2是有效的结果。 确实,这是一个偏好问题。我个人更喜欢使用prefer3ѭ,但是
也可以。无论哪种情况,您的代码看起来都差不多。