我有一個元素列表。每個有四個道具的元素。ComparatorChain vs將屬性轉換爲字符串並比較
- A Date Obj。
- 枚舉的OBJ(值是{E-4,d-3,C-2,B-1,A-0})
- 另一個日期的OBJ
- 另一個日期的OBJ。
目前我使用一個comparator[MyObjComparator]
其中我將每個道具成String
並在StringBuilder
追加字符串,然後比較所得到的字符串排序的列表中。 我使用dateFormat作爲yyyyMMddHHmmss
。
另一種方法可以是compatorChain
。我可以在MyObjComparator
中創建一些內部比較類[我們不能避免使用這個。所有的impl都必須放在compareTo]中,並添加它們來構建比較器鏈並使用它。
現在我的問題是哪一個在性能或壽命方面會很好?
編輯1: 所有四個屬性都應該包含在比較中。 添加代碼卡 1.檢查每個屬性indivitualy
package com.poc.MultiPropComparator.service;
import java.util.Comparator;
import java.util.Date;
import com.poc.MultiPropComparator.domain.MyDomainObject;
import com.poc.MultiPropComparator.domain.PropertyType;
public class MyDomainObjectComparator implements Comparator<MyDomainObject>{
@Override
public int compare(MyDomainObject o1, MyDomainObject o2) {
Date recordDate1 = o1.getRecordDate();
Date recordDate2 = o2.getRecordDate();
if(recordDate1.compareTo(recordDate2)==0){
return compareType(o1,o2);
}
return recordDate1.compareTo(recordDate2);
}
private int compareType(MyDomainObject o1, MyDomainObject o2) {
PropertyType type1 = o1.getType();
PropertyType type2 = o2.getType();
if(type1.compareTo(type2)==0){
return compareStartDate(o1,o2);
}
return type1.compareTo(type2);
}
private int compareStartDate(MyDomainObject o1, MyDomainObject o2) {
Date startDate1 = o1.getStartDate();
Date startdDate2 = o2.getStartDate();
if(startDate1.compareTo(startdDate2)==0){
return compareEndDate(o1,o2);
}
return startDate1.compareTo(startdDate2);
}
private int compareEndDate(MyDomainObject o1, MyDomainObject o2) {
Date endDate1 = o1.getEndDate();
Date endDate2 = o2.getEndDate();
return endDate1.compareTo(endDate2);
}
}
爲什麼不直接比較日期?日期實施可比較 ... –
assylias
爲什麼不對兩種方法進行基準測試?就我個人而言,儘可能避免字符串轉換,但如果您對某個特定方面感興趣,則可以對其進行測試。 –
你必須優先考慮你的支票。例如,首先比較第一個日期對象。如果相等,則比較枚舉對象。等等,你能否提供你建立StringBuilder的方式?你必須自動完成它。 – sp00m