我有一个元素列表。每个有四个道具的元素。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