我有一个元素列表。每个元素都有四个道具。
- 日期对象。
- 枚举 Obj(值为 {E-4,D-3,C-2,B-1,A-0})
- 另一个约会对象
- 另一个日期对象。
目前,我正在使用 a 对列表进行排序,comparator[MyObjComparator]
其中我将每个道具转换为String
并将字符串附加到 a 中StringBuilder
,然后比较结果字符串。我使用 dateFormat 作为yyyyMMddHHmmss
.
另一种方法是使用compatorChain
. 我可以在MyObjComparator
[我们无法避免使用这个。所有 impl 必须进入 compareTo] 并添加它们以构建比较器链并使用它。
现在我的问题是哪一个在性能或寿命方面会更好?
编辑 1:所有四个属性都应包含在比较中。添加代码快照 1. 逐个检查每个属性
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);
}
}